package com.demo.lib.common.widget.verticalviewpager;
import android.database.DataSetObservable;
import android.database.DataSetObserver;
import android.os.Parcelable;
import android.view.View;
import android.view.ViewGroup;
public abstract class PagerAdapter {
private DataSetObservable mObservable = new DataSetObservable();
public static final int POSITION_UNCHANGED = -1;
public static final int POSITION_NONE = -2;
/**
* Return the number of views available.
*/
public abstract int getCount();
/**
* Called when a change in the shown pages is going to start being made.
*
* @param container
* The containing View which is displaying this adapter's page
* views.
*/
public void startUpdate(ViewGroup container) {
startUpdate((View) container);
}
/**
* 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 from {@link #finishUpdate(ViewGroup)}
* .
*
* @param container
* The containing View in which the page will be shown.
* @param position
* The page position to be instantiated.
* @return Returns an Object representing the new page. This does not need
* to be a View, but can be some other container of the page.
*/
public Object instantiateItem(ViewGroup container, int position) {
return instantiateItem((View) container, position);
}
/**
* 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 from {@link #finishUpdate(ViewGroup)}.
*
* @param container
* The containing View from which the page will be removed.
* @param position
* The page position to be removed.
* @param object
* The same object that was returned by
* {@link #instantiateItem(View, int)}.
*/
public void destroyItem(ViewGroup container, int position, Object object) {
destroyItem((View) container, position, 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.
*
* @param container
* The containing View from which the page will be removed.
* @param position
* The page position that is now the primary.
* @param object
* The same object that was returned by
* {@link #instantiateItem(View, int)}.
*/
public void setPrimaryItem(ViewGroup container, int position, Object object) {
setPrimaryItem((View) container, position, object);
}
/**
* Called when the 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.
*
* @param container
* The containing View which is displaying this adapter's page
* views.
*/
public void finishUpdate(ViewGroup container) {
finishUpdate((View) container);
}
/**
* Called when a change in the shown pages is going to start being made.
*
* @param container
* The containing View which is displaying this adapter's page
* views.
*
* @deprecated Use {@link #startUpdate(ViewGroup)}
*/
public void startUpdate(View container) {
}
/**
* 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 from {@link #finishUpdate(ViewGroup)}
* .
*
* @param container
* The containing View in which the page will be shown.
* @param position
* The page position to be instantiated.
* @return Returns an Object representing the new page. This does not need
* to be a View, but can be some other container of the page.
*
* @deprecated Use {@link #instantiateItem(ViewGroup, int)}
*/
public Object instantiateItem(View container, int position) {
throw new UnsupportedOperationException(
"Required method instantiateItem was not overridden");
}
/**
* 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 from {@link #finishUpdate(View)}.
*
* @param container
* The containing View from which the page will be removed.
* @param position
* The page position to be removed.
* @param object
* The same object that was returned by
* {@link #instantiateItem(View, int)}.
*
* @deprecated Use {@link #destroyItem(ViewGroup, int, Object)}
*/
public void destroyItem(View container, int position, Object object) {
throw new UnsupportedOperationException(
"Required method destroyItem was not overridden");
}
/**
* 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.
*
* @param container
* The containing View from which the page will be removed.
* @param position
* The page position that is now the primary.
* @param object
* The same object that was returned by
* {@link #instantiateItem(View, int)}.
*
* @deprecated Use {@link #setPrimaryItem(ViewGroup, int, Object)}
*/
public void setPrimaryItem(View container, int position, Object object) {
}
/**
* Called when the 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.
*
* @param container
* The containing View which is displaying this adapter's page
* views.
*
* @deprecated Use {@link #finishUpdate(ViewGroup)}
*/
public void finishUpdate(View container) {
}
/**
* Determines whether a page View is associated with a specific key object
* as returned by {@link #instantiateItem(ViewGroup, int)}. This method is
* required for a PagerAdapter to function properly.
*
* @param view
* Page View to check for association with object
* @param object
* Object to check for association with view
* @return true if view
is associated with the key object
* object
*/
public abstract boolean isViewFromObject(View view, Object object);
/**
* Save any instance state associated with this adapter and its pages that
* should be restored if the current UI state needs to be reconstructed.
*
* @return Saved state for this adapter
*/
public Parcelable saveState() {
return null;
}
/**
* Restore any instance state associated with this adapter and its pages
* that was previously saved by {@link #saveState()}.
*
* @param state
* State previously saved by a call to {@link #saveState()}
* @param loader
* A ClassLoader that should be used to instantiate any restored
* objects
*/
public void restoreState(Parcelable state, ClassLoader loader) {
}
/**
* Called when the host view is attempting to determine if an item's
* position has changed. Returns {@link #POSITION_UNCHANGED} if the position
* of the given item has not changed or {@link #POSITION_NONE} if the item
* is no longer present in the adapter.
*
*
* The default implementation assumes that items will never change position * and always returns {@link #POSITION_UNCHANGED}. * * @param object * Object representing an item, previously returned by a call to * {@link #instantiateItem(View, int)}. * @return object's new position index from [0, {@link #getCount()}), * {@link #POSITION_UNCHANGED} if the object's position has not * changed, or {@link #POSITION_NONE} if the item is no longer * present. */ public int getItemPosition(Object object) { return POSITION_UNCHANGED; } /** * This method should be called by the application if the data backing this * adapter has changed and associated views should update. */ public void notifyDataSetChanged() { mObservable.notifyChanged(); } void registerDataSetObserver(DataSetObserver observer) { mObservable.registerObserver(observer); } void unregisterDataSetObserver(DataSetObserver observer) { mObservable.unregisterObserver(observer); } /** * 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. * * @param position * The position of the title requested * @return A title for the requested page */ public CharSequence getPageTitle(int position) { return null; } /** * Returns the proportional width of a given page as a percentage of the * ViewPager's measured width from (0.f-1.f] * * @param position * The position of the page requested * @return Proportional width for the given page position */ public float getPageWidth(int position) { return 1.f; } public float getPageHeight(int position) { return 1.f; } }