-1

这是recyclerview适配器内部为删除的代码:RecyclerView:删除对象后在recyclerviewadapter的数组列表没有更新其它对象的位置

 holder.delBt.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       //TODO delete record 
       NotesObject note = mDataList.get(position); 
       DBHelper db = new DBHelper(holder.itemView.getContext()); 
       db.deleteNote(note.getUserID(), note.getNoteID()); 
       mDataList.remove(position); 
       //TODO fix bug 
//    ArrayList<NotesObject> updateList = new ArrayList<NotesObject>(); 
//    for(int i=0; i<mDataList.size(); i++){ 
//     if(i!=position){ 
//      updateList.add(mDataList.get(i)); 
//     } 
//    } 
//    mDataList = updateList; 
       notifyItemRemoved(position); 
//    notifyDataSetChanged(); 
      } 
     }); 

如果我在recyclerview 2行,删除的第一行,删除成功并且recyclerview得到完美更新。但现在当我继续删除第二个项目时,该项目返回位置1(即,其位置在位置0处的项目被删除后未更新),并且列表的大小返回为1(即,大小在先前删除之后得到更新),因此它会为索引超出范围而引发错误。但是,如果在删除第一项后,我重新打开该片段,然后删除第二项,它工作正常。我尝试手动更新列表索引,但抛出了不一致的错误。

回答

0

如果将来有人面临类似的问题,这是解决方案: 在致电notifyItemRemoved(position)后,需要拨打notifyItemRangeChanged(position, mDataList.size())

相关问题