RecyclerView notifyItemRemoved(位置)无法正常工作

时间:2017-04-05 12:18:10

标签: android android-recyclerview

我有一个RecyclerView及其RecyclerView.Adapter和查看持有人。我试图从列表中删除一个项目,代码如下onClick()里面的ViewHolder中的删除按钮

int position = getAdapterPosition();  
if(position > -1)
{
Place place = placeList.remove(position);
notifyItemRemoved(position);
notifyItemRangeChanged(position, getItemCount());
}

尽管删除视图并执行动画(列表也会受到影响),旧视图(或较低视图)仍然存在或再次绘制。 例如,如果列表以size = 5开头,那么我尝试删除索引4,删除4,然后仍然绘制5个视图。

修改

如果我删除notifyItemRangeChanged(),那么只有在我执行以下操作时才会执行该错误

1-点击删除

2点击按钮非常快,将我带到新视图

3-回到我可以删除的列表

4-开始删除,并发生错误。即使List size = 0(使用0调用getItemCount),仍会保留1个项目。

如果我只调用NotifyDataSetChanged(),那么它会删除项目,但是视图只是停留在那里!!

感谢任何帮助或建议。

感谢。

编辑完成课程LINK

5 个答案:

答案 0 :(得分:1)

试试这个:

placeList.remove(position);
notifyItemRemoved(position);

答案 1 :(得分:1)

使用下面的代码,它将解决您的问题。

 holder.deleteImg.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(list.size()!=0){
                list.remove(position);
                notifyItemRemoved(position);
                notifyItemRangeChanged(position,list.size());
            }

         }
    });

答案 2 :(得分:1)

我遇到了同样的问题,notifyItemRangeChanged()调用并没有帮助,而notifyDataSetChanged()却做到了(尽管停止了动画)。但是我在RecyclerView上使用ItemTouchHelper(以允许移动项目),很明显此类是造成麻烦的原因。

在我看来,唯一的区别是要重现此删除后重叠错误,用户必须在删除项目时长按项目。

修改完ItemTouchHelper.Callback的isLongPressDragEnabled()方法后,返回false而不是true,此问题已解决。

答案 3 :(得分:0)

  lastImages.remove(position); (lastImages equals your array list)
  newContentAdapter.notifyDataSetChanged();

它是有效的。您必须在数组中删除它而不是项目。然后通知适配器。多数民众赞成

答案 4 :(得分:-1)

您需要更新适配器;

在Adapter类中创建放置数据的方法。

例如:setData(List<Place> data);

当你需要写下列表中的最后一项时:adapter.setData(null);

我遇到了同样的问题。只需设置list = null。这就是全部。