gpt4 book ai didi

android - 如何正确使用 RecyclerView.Adapter notifyItemInserted/Removed?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:42:47 56 4
gpt4 key购买 nike

例如,您有一个适配器,并在 onBindViewHolder 方法中将 OnClickListener 设置为某些 View (并根据 View 位置在那里执行一些操作)。您应该将 final 分配给方法 onBindViewHolder 的位置参数,以便可以从 onClick() 访问它。

更改数据集(删除或添加列表中的项目)后,您调用 onItemInserted 或 onItemRemoved,这实际上在 recyclerview 中添加/删除了一个 View ,但它不会刷新其他 View 项,因此当您单击相邻 View 项时,它将打开一个屏幕或显示具有无效索引的数据。为了避免这种情况,我基本上调用 notifyDatasetChanged 来调用 onBind 到所有可见 View 并删除/添加一些 View 。

那么如何在调用 notifyItemInserted/removed 时刷新其他 View ,或者如何适本地使用这些方法?

最佳答案

如果在未调用 notifyDataSetChanged 的情况下插入或删除数据集中的项目,则将位置分配给 onBindViewHolder 中的变量将导致不一致的状态。

要使用 onItemInsertedonItemRemoved,viewholder 中的数据应该保持一致,因为它不会被重绘并且 onClick 会使用这个无效位置添加或删除项目之前分配。

对于这个和其他用例,RecyclerView.ViewHolder 提供了访问其位置和 ID 的方法:

使用 getAdapterPosition()getItemId() 获取有效的位置和 ID。

另请查看 RecyclerView.ViewHolder 中可用的其他方法.

关于android - 如何正确使用 RecyclerView.Adapter notifyItemInserted/Removed?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35812485/

56 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com