RecyclerView在删除后不会更新元素索引

时间:2018-05-27 04:01:25

标签: java android android-recyclerview

我有这个项目,我有一个任务列表,我有一个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);
}

2 个答案:

答案 0 :(得分:0)

你的问题在2行以下。请在异步请求(deleteTask(...))的响应中移动这些行。

   lista.remove(position);
   notifyItemRemoved(position);

下面的代码行执行异步调用,因此在代码行之后不一定会调用上面的其他2行。

deleteTask(lista.get(position).getId());

答案 1 :(得分:0)

那是因为notifyItemRemoved(position)并不一定会导致其余项目反弹 您可以改用notifyDataSetChanged()notifyDataSetChanged()总是导致所有元素的完全重新绑定,在您的情况下,它将更新索引。

只需将notifyItemRemoved(position)替换为notifyDataSetChanged()

即可