【问题标题】:Is it okay to do the RecyclerView setAdapter() several times?可以多次执行 RecyclerView setAdapter() 吗?
【发布时间】:2021-01-03 17:01:56
【问题描述】:

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

还是应该setAdapter 只使用一次?

adpater添加项目后可以使用setAdapter吗?

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

【问题讨论】:

    标签: android android-recyclerview android-adapter


    【解决方案1】:

    一般做法是每次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,因为您从根本上更改了适配器数据集类型。然而,这是一个极端情况。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 2017-09-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-01
          • 2020-09-11
          • 1970-01-01
          • 2016-05-04
          相关资源
          最近更新 更多