在ViewPager中发生这些更改时,通知RecylerView有关数据集更改的最佳方法是什么?

时间:2017-06-01 14:52:57

标签: android performance android-recyclerview android-viewpager

我查找了RecyclerView.Adapter的文档,了解不同notify...方法的工作原理。它声明

  

如果您正在编写适配器,则尽可能使用更具体的更改事件会更有效。依靠notifyDataSetChanged()作为最后的手段。

点击RecyclerView的项目即可启动包含ViewPager的活动。 ViewPager使用FragmentStatePagerAdapter。因此,如果我愿意,我可以滑动视图并对其进行更改。当我的寻呼机托管活动完成后,我必须通知适配器RecyclerView有关更改的信息。我只能看到两种可能的方法:

  1. 我可以设置这样的沟通渠道:寻呼机的片段如果被编辑则通知托管活动 - >托管活动在完成后向父活动发送所有更改的列表 - >对于所有更改,父活动会在notifyItemChanged()上调用RecylerView.Adapter。我想不出实现这个并不难看的方法。
  2. 我说这是最后的手段,并且直截了当地调用了“notifyDataSetChanged()”,但问题已经消失,但没有证据表明它不会减慢应用程序的速度。
  3. 我对此很陌生,所以也许我错过了一个明显的解决方案。

1 个答案:

答案 0 :(得分:1)

我认为可以根据具体情况应用这两种方法。要做出正确的决定,您应该考虑可能会更改的项目数量以及列表中的项目总数。

没有那么多项目或许多更改 - 使用notifyDataSetChanged

许多列表项或单个更改 - 使用第一种方法。

方法#1可以通过调用startActivityForResult轻松实现,并期望在onActivityResult中返回已更改项目ID的列表。

不要忘记 - 您可以随时测量和比较两种方法的表现。