【发布时间】:2021-01-03 17:01:56
【问题描述】:
当使用RecyclerView时,setAdapter()被使用了多少次有关系吗?
还是应该setAdapter 只使用一次?
在adpater添加项目后可以使用setAdapter吗?
或者setAdapter 应该在向adapter 添加项目之前工作吗?
【问题讨论】:
标签: android android-recyclerview android-adapter
当使用RecyclerView时,setAdapter()被使用了多少次有关系吗?
还是应该setAdapter 只使用一次?
在adpater添加项目后可以使用setAdapter吗?
或者setAdapter 应该在向adapter 添加项目之前工作吗?
【问题讨论】:
标签: android android-recyclerview android-adapter
一般做法是每次RecyclerView 的实例化调用一次RecyclerView::setAdapter,然后使用RecyclerView.Adapter<VH> 更新底层List<T> 数据集,然后调用Adapter::notifyDatasetChanged 等方法。
Recyclerview.Adapter 还允许通过其他方法更新单个行:https://developer.android.com/reference/androidx/recyclerview/widget/RecyclerView.Adapter
更现代的技术包括DiffUtil 或AsyncListDiffer,它们使用DiffUtil 或手动实现来抽象计算数据集更新之间的单个行更改。这是最有效的机制,因为它只需要在屏幕上“重新绑定”更改的数据,而不是重新绑定所有视图。
如果您打算更改基础数据集的类型T,则可以多次调用RecyclerView::setAdapter,因为您从根本上更改了适配器数据集类型。然而,这是一个极端情况。
【讨论】:
除非您在同一个 RecyclerView 上切换不同的适配器,否则建议您调用一次 setAdapter(即使是一个空的元素列表)。然后,当您更新元素列表时,您可以调用适配器方法,如 notifyDataSetChanged 和其他类似方法。
【讨论】:
好吧,如果您为了刷新而多次设置同一个适配器实例,请查看RecyclerView.Adapter#notifyDataSetChanged()
更好的方法是“在将项目添加到适配器之前设置适配器工作”,然后您可以添加、删除和修改适配器数据项。然后就可以通知适配器了。
【讨论】: