【问题标题】:RecyclerView: position of other object not updating in the arraylist of recyclerviewadapter after deleting an objectRecyclerView:删除一个对象后,其他对象在recyclerviewadapter的arraylist中的位置没有更新
【发布时间】:2017-11-19 00:25:26
【问题描述】:

这是recyclerview适配器内部的删除代码:

      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(即大小在上次删除后更新),因此它会引发索引超出范围的错误。但是如果在删除第一项之后,我重新打开片段然后删除第二项,它就可以正常工作。我尝试手动更新列表索引,但引发了不一致错误。

【问题讨论】:

    标签: android sqlite arraylist android-recyclerview android-adapter


    【解决方案1】:

    如果将来有人遇到类似问题,解决方案如下: 调用notifyItemRemoved(position)后,需要调用notifyItemRangeChanged(position, mDataList.size())

    【讨论】:

      猜你喜欢
      • 2022-01-24
      • 1970-01-01
      • 2018-04-26
      • 1970-01-01
      • 1970-01-01
      • 2013-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多