【发布时间】:2019-03-26 16:26:03
【问题描述】:
例如,您有一个适配器,并在 onBindViewHolder 方法中将 OnClickListener 设置为某些视图(并根据视图位置在那里执行一些操作)。您应该将 final 分配给方法 onBindViewHolder 的位置参数,以便可以从 onClick() 访问它。
更改数据集(删除或添加列表中的项目)后,您调用 onItemInserted 或 onItemRemoved,这确实会在 recyclerview 中添加/删除视图,但它不会刷新其他视图项,因此当您单击邻居视图项时,它将打开一个屏幕或显示无效索引的数据。为了避免这种情况,我基本上调用 notifyDatasetChanged 来调用 onBind 到所有可见视图并删除/添加一些视图。
那么当您调用 notifyItemInserted/removed 时如何刷新其他视图或如何适当地使用这些方法?
【问题讨论】:
-
不应该这样。它工作正常。如果您遇到错误的索引问题,请发布您的代码。理想情况下应该是
list.remove(position);然后是notifyItemRemoved(position);。这对我来说很好。 -
你应该使用
viewHolder.getAdapterPosition()而不是自己保留最终位置 -
删除项目后使用 notifyItemRangeChanged(0,list.size());...它会工作
-
@DavidMedenjak 你是对的!请将您的评论转换为答案,我会接受它
标签: android android-recyclerview