Class PagerAdapter
ViewPager
.
When you implement a PagerAdapter, you must override the following methods at minimum:
instantiateItem(ViewGroup, int)
destroyItem(ViewGroup, int, Object)
getCount()
isViewFromObject(View, Object)
PagerAdapter is more general than the adapters used for
AdapterViews
. Instead of providing a
View recycling mechanism directly ViewPager uses callbacks to indicate the
steps taken during an update. A PagerAdapter may implement a form of View
recycling if desired or use a more sophisticated method of managing page
Views such as Fragment transactions where each page is represented by its
own Fragment.
ViewPager associates each page with a key Object instead of working with
Views directly. This key is used to track and uniquely identify a given page
independent of its position in the adapter. A call to the PagerAdapter method
startUpdate(ViewGroup)
indicates that the contents of the ViewPager
are about to change. One or more calls to instantiateItem(ViewGroup, int)
and/or destroyItem(ViewGroup, int, Object)
will follow, and the end
of an update will be signaled by a call to finishUpdate(ViewGroup)
.
By the time finishUpdate
returns the views
associated with the key objects returned by
instantiateItem
should be added to
the parent ViewGroup passed to these methods and the views associated with
the keys passed to destroyItem
should be removed. The method isViewFromObject(View, Object)
identifies
whether a page View is associated with a given key object.
A very simple PagerAdapter may choose to use the page Views themselves
as key objects, returning them from instantiateItem(ViewGroup, int)
after creation and adding them to the parent ViewGroup. A matching
destroyItem(ViewGroup, int, Object)
implementation would remove the
View from the parent ViewGroup and isViewFromObject(View, Object)
could be implemented as return view == object;
.
PagerAdapter supports data set changes. Data set changes must occur on the
main thread and must end with a call to notifyDataSetChanged()
similar
to AdapterView adapters derived from BaseAdapter
. A data
set change may involve pages being added, removed, or changing position. The
ViewPager will keep the current page active provided the adapter implements
the method getItemPosition(Object)
.
-
Field Summary
Modifier and TypeFieldDescriptionstatic final int
static final int
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionabstract void
destroyItem
(ViewGroup container, int position, Object object) Remove a page for the given position.
The adapter is responsible for removing the view from its container, although it only must ensure this is done by the time it returns fromfinishUpdate(ViewGroup)
.void
finishUpdate
(ViewGroup container) Called when a change in the shown pages has been completed.
At this point you must ensure that all of the pages have actually been added or removed from the container as appropriate.abstract int
getCount()
Return the number of views available.int
getItemPosition
(Object object) Called when the host view is attempting to determine if an item's position has changed.getPageTitle
(int position) This method may be called by the ViewPager to obtain a title string to describe the specified page.float
getPageWidth
(int position) Returns the proportional width of a given page as a percentage of the ViewPager's measured width from (0.f-1.f]abstract Object
instantiateItem
(ViewGroup container, int position) Create the page for the given position.
The adapter is responsible for adding the view to the container given here, although it only must ensure this is done by the time it returns fromfinishUpdate(ViewGroup)
.abstract boolean
isViewFromObject
(View view, Object object) Determines whether a page View is associated with a specific key object as returned byinstantiateItem(ViewGroup, int)
.void
This method should be called by the application if the data backing this adapter has changed and associated views should update.void
registerDataSetObserver
(DataSetObserver observer) Register an observer to receive callbacks related to the adapter's data changing.void
restoreState
(Parcelable state, ClassLoader loader) Restore any instance state associated with this adapter and its pages that was previously saved bysaveState()
.Save any instance state associated with this adapter and its pages that should be restored if the current UI state needs to be reconstructed.void
setPrimaryItem
(ViewGroup container, int position, Object object) Called to inform the adapter of which item is currently considered to be the "primary", that is the one show to the user as the current page.void
startUpdate
(ViewGroup container) Called when a change in the shown pages is going to start being made.void
unregisterDataSetObserver
(DataSetObserver observer) Unregister an observer from callbacks related to the adapter's data changing.
-
Field Details
-
POSITION_UNCHANGED
public static final int POSITION_UNCHANGED- See Also:
-
POSITION_NONE
public static final int POSITION_NONE- See Also:
-
-
Constructor Details
-
PagerAdapter
public PagerAdapter()
-
-
Method Details
-
getCount
public abstract int getCount()Return the number of views available. -
startUpdate
Called when a change in the shown pages is going to start being made.- Parameters:
container
- The containing View which is displaying this adapter's page views.
-
instantiateItem
Create the page for the given position.
The adapter is responsible for adding the view to the container given here, although it only must ensure this is done by the time it returns fromfinishUpdate(ViewGroup)
.- Parameters:
container
- The containing View in which the page will be shown.position
- The page position to be instantiated.- Returns:
- Returns an Object representing the new page. This does not need to be a View, but can be some other container of the page.
-
destroyItem
public abstract void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) Remove a page for the given position.
The adapter is responsible for removing the view from its container, although it only must ensure this is done by the time it returns fromfinishUpdate(ViewGroup)
.- Parameters:
container
- The containing View from which the page will be removed.position
- The page position to be removed.object
- The same object that was returned byinstantiateItem(ViewGroup, int)
.
-
setPrimaryItem
Called to inform the adapter of which item is currently considered to be the "primary", that is the one show to the user as the current page. This method will not be invoked when the adapter contains no items.- Parameters:
container
- The containing View from which the page will be removed.position
- The page position that is now the primary.object
- The same object that was returned byinstantiateItem(ViewGroup, int)
.
-
finishUpdate
Called when a change in the shown pages has been completed.
At this point you must ensure that all of the pages have actually been added or removed from the container as appropriate.- Parameters:
container
- The containing View which is displaying this adapter's page views.
-
isViewFromObject
Determines whether a page View is associated with a specific key object as returned byinstantiateItem(ViewGroup, int)
. This method is required for a PagerAdapter to function properly.- Parameters:
view
- Page View to check for association withobject
object
- Object to check for association withview
- Returns:
- true if
view
is associated with the key objectobject
-
saveState
Save any instance state associated with this adapter and its pages that should be restored if the current UI state needs to be reconstructed.- Returns:
- Saved state for this adapter
-
restoreState
Restore any instance state associated with this adapter and its pages that was previously saved bysaveState()
.- Parameters:
state
- State previously saved by a call tosaveState()
loader
- A ClassLoader that should be used to instantiate any restored objects
-
getItemPosition
Called when the host view is attempting to determine if an item's position has changed. ReturnsPOSITION_UNCHANGED
if the position of the given item has not changed orPOSITION_NONE
if the item is no longer present in the adapter.The default implementation assumes that items will never change position and always returns
POSITION_UNCHANGED
.- Parameters:
object
- Object representing an item, previously returned by a call toinstantiateItem(ViewGroup, int)
.- Returns:
- object's new position index from [0,
getCount()
),POSITION_UNCHANGED
if the object's position has not changed, orPOSITION_NONE
if the item is no longer present.
-
notifyDataSetChanged
public void notifyDataSetChanged()This method should be called by the application if the data backing this adapter has changed and associated views should update. -
registerDataSetObserver
Register an observer to receive callbacks related to the adapter's data changing.- Parameters:
observer
- TheDataSetObserver
which will receive callbacks.
-
unregisterDataSetObserver
Unregister an observer from callbacks related to the adapter's data changing.- Parameters:
observer
- TheDataSetObserver
which will be unregistered.
-
getPageTitle
This method may be called by the ViewPager to obtain a title string to describe the specified page. This method may return null indicating no title for this page. The default implementation returns null.- Parameters:
position
- The position of the title requested- Returns:
- A title for the requested page
-
getPageWidth
public float getPageWidth(int position) Returns the proportional width of a given page as a percentage of the ViewPager's measured width from (0.f-1.f]- Parameters:
position
- The position of the page requested- Returns:
- Proportional width for the given page position
-