The documentation for the method getItemPosition in Android\'s PagerAdapter class states that it is:
Called when the host view is attempting to determine
By default, the positions of items in a ViewPager are deemed fixed; thats why getItemPosition()
by default returns POSITION_UNCHANGED
. When you move an item around, ViewPager has to know where to remove an item (the old position of the item) and where to add it. This is what getItemPosition()
is used for. It allows you to tell the ViewPager which item to put where, even after your pages have been instantiated.
getItemPosition()
is only called when you call notifyDataSetChanged()
on your PagerAdapter. By design this means that the "changed" means "changed from when the ViewPager last populated its pages", as notifyDataSetChanged()
causes the ViewPager to redraw its children where necessary. In other words: "changed" has either of the meanings you mentioned; whichever one is the most recent to occur.
I think getItemPosition
is quite tricky to understand without a sample. See my example of how to use getItemPosition(...) here; I think it'll clarify some things.
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:
getItemPosition
returns POSITION_UNCHANGED
;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
..