RecyclerView添加/删除动画,同时保持ID的更新
我有RecyclerView卡,我可以在位置0(顶部)添加并删除列表中的任何卡。事情是,每张卡片都有一个“更多选项”按钮,显示每张卡片的PopupMenu参考。见截图:
事情是,如果我想要一个动画,我需要使用adapter.notifyItemInserted(0)
在添加,adapter.notifyItemRemoved(position)
后删除。但是,如果我不使用adapter.notifyDataSetChanged()
,其他卡的ID将不会更新,如果我尝试扩展PopupMenu或删除任何其他卡,我会得到一个IndexOutOfBoundsException
,因为我试图使用一个不存在的ID (在删除卡的情况下)。RecyclerView添加/删除动画,同时保持ID的更新
总之,我期待通知RecyclerView的单个项目操作,同时保持整个RV卡更新。
我试图adapter.notifyItemRangeChanged(0, arrayList.size())
但它的作用一样notifyDataSetChanged()
在您的代码中的任何地方使用holder.getAdapterPosition()
,其中的操作是异步的或由事件启动。在这种情况下,当像用户点击一样的事件上调用异步回调时,传递到onBindViewHiolder
的position
将无效。在任何其他地方,使用通过的position
是安全的。
只是要注意,adapter.notifyItemInserted(0)
或adapter.notifyItemRemoved(position)
不会导致其他recyclerview是反弹。只是他们的观点职位将被更新。这是为了优化和之所以position
陈旧
感谢您的洞察力。它按预期工作。 –
我假设你正在使用参数位置在:
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
适配器
。尝试使用
holder.getAdapterPosition()
改为。这应该可以解决你的问题。
然后很明显你的ID是错误选择的...其他ID不应该改变当你删除一个项目(ID应该是稳定的) – Selvin
@Selvin我不是手动设置ID 。 –
如果您想获得帮助,请显示您的代码。 – Divers