例如,您有一个适配器,并在 onBindViewHolder 方法中将 OnClickListener 设置为某些 View (并根据 View 位置在那里执行一些操作)。您应该将 final
分配给方法 onBindViewHolder 的位置参数,以便可以从 onClick() 访问它。
更改数据集(删除或添加列表中的项目)后,您调用 onItemInserted 或 onItemRemoved,这实际上在 recyclerview 中添加/删除了一个 View ,但它不会刷新其他 View 项,因此当您单击相邻 View 项时,它将打开一个屏幕或显示具有无效索引的数据。为了避免这种情况,我基本上调用 notifyDatasetChanged 来调用 onBind 到所有可见 View 并删除/添加一些 View 。
那么如何在调用 notifyItemInserted/removed 时刷新其他 View ,或者如何适本地使用这些方法?
最佳答案
如果在未调用 notifyDataSetChanged
的情况下插入或删除数据集中的项目,则将位置分配给 onBindViewHolder
中的变量将导致不一致的状态。
要使用 onItemInserted
或 onItemRemoved
,viewholder 中的数据应该保持一致,因为它不会被重绘并且 onClick
会使用这个无效位置在添加或删除项目之前分配。
对于这个和其他用例,RecyclerView.ViewHolder
提供了访问其位置和 ID 的方法:
使用 getAdapterPosition()
或 getItemId()
获取有效的位置和 ID。
另请查看 RecyclerView.ViewHolder
中可用的其他方法.
关于android - 如何正确使用 RecyclerView.Adapter notifyItemInserted/Removed?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35812485/