多次执行 RecyclerView setAdapter() 可以吗?

问题描述

使用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.AdapterDiffUtil,它们使用 AsyncListDiffer 或手动实现来抽象处理数据集更新之间的单个行更改。这是最有效的机制,因为它只需要在屏幕上“重新绑定”更改的数据,而不是重新绑定所有视图。

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

,

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

更好的方法是“在将项添加到适配器之前设置适配器工作”,然后您可以添加、删除和修改适配器数据项。然后就可以通知适配器了。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...