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

Android 什么时候应该考虑一个项目的变化?什么位置?,android,android-viewpager,Android,Android Viewpager,Android PagerAdapter类中getItemPosition方法的文档说明它是: 当宿主视图试图确定项目的位置是否已更改时调用 应该调用此方法以指示该适配器的项在项组中的位置是否已更改 但是,当重写方法应该考虑要改变的位置时,它从来没有声明过。这是否意味着该位置与上次调用项目getItemPosition时的位置不同?这是否意味着该项的位置与上次调用notifyDataSetChanged时的位置不同?或者这是否意味着项目的位置与将项目添加到viewPager时不同?您可以在vie

Android PagerAdapter类中getItemPosition方法的文档说明它是:

当宿主视图试图确定项目的位置是否已更改时调用

应该调用此方法以指示该适配器的项在项组中的位置是否已更改


<>但是,当重写方法应该考虑要改变的位置时,它从来没有声明过。这是否意味着该位置与上次调用项目getItemPosition时的位置不同?这是否意味着该项的位置与上次调用notifyDataSetChanged时的位置不同?或者这是否意味着项目的位置与将项目添加到viewPager时不同?

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

我不会太担心“改变”的含义;有两种情况:

  • 添加的项目的位置从未更改,然后
    getItemPosition
    返回
    position_UNCHANGED
  • 项目的位置将更改,或项目将被删除。如果项目位置没有更改,则返回
    position\u UNCHANGED
    或实际位置没有差异。因此,为了保持实现的简单性,您可以返回位置(或
    position\u NONE
    ),而忽略
    position\u未更改的情况

  • 默认情况下,ViewPager中项目的位置被视为固定的;这就是为什么默认情况下
    getItemPosition()
    会返回未更改的
    POSITION\u
    。移动项目时,ViewPager必须知道在何处删除项目(项目的旧位置)以及在何处添加项目。这就是
    getItemPosition()
    的用途。它允许您告诉ViewPager将哪个项目放在哪里,即使页面已实例化

    getItemPosition()
    仅当您在PagerAdapter上调用
    notifyDataSetChanged()
    时才会被调用。按设计,这意味着“更改”意味着“从ViewPager上次填充其页面时更改”,因为
    notifyDataSetChanged()
    会导致ViewPager在必要时重新绘制其子项。换言之,“变更”具有您提到的任一含义;以最近发生的为准

    我认为
    getItemPosition
    如果没有示例,理解起来相当困难;我想这会澄清一些事情