RecyclerView setAdapter() 做几次就可以了吗?

Is it okay to do the RecyclerView setAdapter() several times?

当使用RecyclerView时,使用了多少次setAdapter()有关系吗?

还是应该setAdapter只用一次?

并且在向 adpater 添加项目后可以使用 setAdapter 吗?

或者 setAdapter 应该在将项目添加到 adapter 之前工作吗?

除非您在同一个 RecyclerView 上切换不同的适配器,否则建议您调用一次 setAdapter(即使元素列表为空)。然后,当您更新元素列表时,您可以调用适配器方法,如 notifyDataSetChanged 和其他类似方法。

一般做法是在每个 RecyclerView 实例化时调用 RecyclerView::setAdapter 一次,然后使用 RecyclerView.Adapter<VH> 更新基础 List<T> 数据集,然后调用 Adapter::notifyDatasetChanged.

Recyclerview.Adapter 还允许通过其他方法更新单个行:https://developer.android.com/reference/androidx/recyclerview/widget/RecyclerView.Adapter

更现代的技术包括 DiffUtilAsyncListDiffer,它们使用 DiffUtil 或手动实现来抽象计算数据集更新之间的单个行更改。这是最有效的机制,因为它只需要在屏幕上“重新绑定”更改的数据,而不是重新绑定所有视图。

如果您打算更改基础数据集的类型 T,那么您可以多次调用 RecyclerView::setAdapter,因为您从根本上更改了适配器数据集类型。然而,这是一个边缘案例。

好吧,如果您多次设置同一个适配器实例只是为了刷新,请看一下RecyclerView.Adapter#notifyDataSetChanged()

更好的方法是 'setAdapter work before adding items to the adapter',然后您可以添加、删除和修改适配器数据项。然后就可以通知适配器了。