我有这个项目,我有一个任务列表,我有一个Button来删除RecyclerView中的任务。问题是,每当我删除一个元素时,以下元素位置的位置都不会更新,如果我有2个任务,例如,我删除了第一个,一切都很好,但是当我尝试删除第二个我得到IndexOutOfBoundsException()。
这是我的代码的一部分。
public void onBindViewHolder(@NonNull viewHolder holder, final int position) {
holder.actividad.setText(lista.get(position).getActividad());
String hora=lista.get(position).getHoraInicio().substring(0,2)+":";
hora+=lista.get(position).getHoraInicio().substring(2);
hora+=" a ";
hora+=lista.get(position).getHoraFin().substring(0,2)+":";
hora+=lista.get(position).getHoraFin().substring(2);
holder.hora.setText(hora);
holder.btnDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
deleteActivity(position);
}
});
}
private void deleteActivity(int position){
Log.i("INFO","Pressed the position "+position);
deleteTask(lista.get(position).getId());
lista.remove(position);
notifyItemRemoved(position);
}
答案 0 :(得分:0)
你的问题在2行以下。请在异步请求(deleteTask(...))的响应中移动这些行。
lista.remove(position);
notifyItemRemoved(position);
下面的代码行执行异步调用,因此在代码行之后不一定会调用上面的其他2行。
deleteTask(lista.get(position).getId());
答案 1 :(得分:0)
那是因为notifyItemRemoved(position)
并不一定会导致其余项目反弹
您可以改用notifyDataSetChanged()
。 notifyDataSetChanged()
总是导致所有元素的完全重新绑定,在您的情况下,它将更新索引。
只需将notifyItemRemoved(position)
替换为notifyDataSetChanged()