RecyclerView notifyItemRemoved(position) 无法正常工作

M.B*_*aka 7 android android-recyclerview

我有一个RecyclerView和它的RecyclerView.Adapter视图持有人。我正在尝试从列表中删除一个项目,onClick()在 ViewHolder 中的删除按钮上的代码如下

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

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

编辑

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

1-点击删除

2-单击按钮非常快速,可将我带到新视图

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

4-开始删除,错误发生。即使List大小 = 0(getItemCount 被调用为 0),仍然保留 1 个项目。

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

任何帮助或建议表示赞赏。

谢谢。

编辑完整课程链接

Abh*_*mar 11

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

 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());
            }

         }
    });
Run Code Online (Sandbox Code Playgroud)


Fer*_*med 7

尝试这个:

placeList.remove(position);
notifyItemRemoved(position);
Run Code Online (Sandbox Code Playgroud)


Can*_*mak 1

  lastImages.remove(position); (lastImages equals your array list)
  newContentAdapter.notifyDataSetChanged();
Run Code Online (Sandbox Code Playgroud)

这是有效的。您必须将其从数组而不是项目中删除。然后通知适配器。就这样