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