什么时候getItemPosition应该考虑项目位置的变化?

Android的PagerAdapter类中getItemPosition方法的文档声明:

当主视图试图确定一个项目的位置是否改变时调用。

这个方法应该被调用来指示一个项目在那个适配器的项目组中的位置是否已经改变了。

但是,它从来没有说明什么时候压倒一切的方法应该考虑改变立场。 这是否意味着位置与上次调用getItemPosition项目时的位置不同? 这是否意味着该项目的位置是不同于上次notifyDataSetChanged被调用? 或者这意味着该项目的位置是不同的项目被添加到viewPager?

Solutions Collecting From Web of "什么时候getItemPosition应该考虑项目位置的变化?"

您可以在ViewPager.java中看到getItemPosition仅在dataSetChanged被调用。 这意味着如果项目的位置与最后一次dataSetChanged不同,则该项目的位置发生更改。

我不会太担心“改变”的意思。 有两种情况:

  1. 添加项目的位置永远不会改变,然后getItemPosition返回POSITION_UNCHANGED ;
  2. 项目的位置发生更改,或者项目被删除。 如果物品位置没有变化,则返回POSITION_UNCHANGED或实际位置没有区别。 所以为了保持简单的实现,你可以返回position(或POSITION_NONE ),忘记POSITION_UNCHANGED ..

默认情况下,ViewPager中的项目的位置被认为是固定的; 这就是为什么getItemPosition()默认返回POSITION_UNCHANGED 。 当您移动物品时,ViewPager必须知道要删除物品的位置(物品的旧位置)以及添加物品的位置。 这就是getItemPosition()的用法。 它允许你告诉ViewPager把哪个项目放在哪里,即使你的页面已经被实例化了。

当您在PagerAdapter上调用notifyDataSetChanged()时,只会调用notifyDataSetChanged() 。 通过devise,这意味着“改变”的意思是“从ViewPager上次填充其页面时改变”,因为notifyDataSetChanged()导致ViewPager在必要时重绘它的子项。 换句话说:“改变”具有你提到的任何一种意义; 无论哪一个是最近发生的。

我认为getItemPosition在没有示例的情况下是相当棘手的。 看到我在这里如何使用getItemPosition(...)例子 ; 我想这会澄清一些事情。