When should getItemPosition consider changes of an item's position?

android, android-viewpager

Solution

You can see in ViewPager.java that `getItemPosition` is called only in `dataSetChanged`. This means the item's position changed if it's different than the last time `dataSetChanged` was called.

I would not worry so much about the meaning of "changed"; there are two cases:

- The position of the added items never changes, then `getItemPosition` returns `POSITION_UNCHANGED`;

- The position of the items changes, or items are removed. If the item position did not change, there is no difference if you return `POSITION_UNCHANGED` or the actual position. So to keep the implementation simple you can return the position (or `POSITION_NONE`) and forget about `POSITION_UNCHANGED`..

Problem

The documentation for the method getItemPosition in Android's PagerAdapter class states that it is: Called when the host view is attempting to determine if an item's position has changed. This method is supposed to be called to indicate whether or not an item's position in the group of items for that adapter has changed. However, it never states when an overriding method should consider the position to be changed. Does it mean the position is different to the position it was in last time the item getItemPosition was called? Does it mean the item's position is different to last time notifyDataSetChanged was called? Or does it mean that the item's position is different to when the item was added to the viewPager?

Original source