У меня проблема с RecyclerView. Каждый раз, когда я пытаюсь управлять Re c View для вставки, удаления или обновления какого-либо элемента, мне приходится бороться с Recycler View и злым notifyDataSetChange.
Я пробовал с runOnUiThread, и каждый раз это решение бесполезно. Я пытался вызвать notifyDataSetChange в адаптере или в Activity, который создает экземпляр Re c View.
Мне действительно нужно знать, как заставить эту работу каждый раз быть немного лучшим разработчиком. Я действительно надеюсь решить эту проблему определенно.
Это моя новая попытка
public class MainActivity extends AppCompatActivity {
private Button nextTurn;
private Button submit;
private EditText name;
private EditText number;
private CounterElementAdapter mAdapter;
private RecyclerView recV;
private List<CounterElement> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
nextTurn = (Button) findViewById(R.id.button2);
submit = (Button) findViewById(R.id.button);
name = (EditText) findViewById(R.id.editText);
number = (EditText) findViewById(R.id.editText2);
recV = (RecyclerView) findViewById(R.id.recV);
list = new ArrayList<CounterElement>();
mAdapter = new CounterElementAdapter(list);
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
recV.setLayoutManager(mLayoutManager);
recV.setItemAnimator(new DefaultItemAnimator());
recV.setAdapter(mAdapter);
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(name.getText().toString().length() > 0 && number.getText().toString().length() > 0) {
mAdapter.addElement(new CounterElement(name.getText().toString(), Integer.parseInt(number.getText().toString())));
}
}
});
nextTurn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mAdapter.nextTurn();
}
});
}
}
public class CounterElementAdapter extends RecyclerView.Adapter<CounterElementAdapter.MyViewHolder> {
private List<CounterElement> elementList;
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView name, counter;
public MyViewHolder(View view) {
super(view);
name = view.findViewById(R.id.name);
counter = view.findViewById(R.id.counter);
}
}
public CounterElementAdapter(List<CounterElement> elementList) {
this.elementList = elementList;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.element, parent, false);
return new MyViewHolder(itemView);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
CounterElement ce = elementList.get(position);
holder.name.setText(ce.getName());
holder.counter.setText(ce.getDuration());
}
@Override
public int getItemCount() {
return elementList.size();
}
public void addElement(CounterElement ce){
elementList.add(ce);
notifyDataSetChanged();
}
public void nextTurn(){
for(CounterElement ce : elementList){
if(ce.getStatus() >= 1)
ce.setStatus(ce.getStatus() - 1);
else {
elementList.remove(elementList.indexOf(ce));
notifyDataSetChanged();
}
}
}
}
Заранее спасибо