我有一个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
答案 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。这就是全部。