介紹:ViewPager和PagerAdapter結合使用
public abstract class PagerAdapter extends Object
java.lang.Object | |
↳ | android.support.v4.view.PagerAdapter |
![]() |
Class Overview
提供一個適配器用於填充ViewPager頁面. 你很可能想要使用一個更加具體的實現, 例如: FragmentPagerAdapter
or FragmentStatePagerAdapter
.
當你實現一個PagerAdapter時,至少需要覆蓋以下幾個方法:
instantiateItem(ViewGroup, int)
destroyItem(ViewGroup, int, Object)
getCount()
isViewFromObject(View, Object)
PagerAdapter比AdapterView的使用更加普通.ViewPager使用回調函數來表示一個更新的步驟,而不是使用一個視圖回收機制。在需要的時候pageradapter也可以實現視圖的回收或者使用一種更為巧妙的方法來管理視圖,比如采用可以管理自身視圖的fragment。
viewpager不直接處理每一個視圖而是將各個視圖與一個鍵聯系起來。這個鍵用來跟蹤且唯一代表一個頁面,不僅如此,該鍵還獨立於這個頁面所在adapter的位置。當pageradapter將要改變的時候他會調用startUpdate函數,接下來會調用一次或多次的instantiateItem或者destroyItem。最后在更新的后期會調用finishUpdate。當finishUpdate返回時 instantiateItem返回的對象應該添加到父ViewGroup destroyItem返回的對象應該被ViewGroup刪除。methodisViewFromObject(View, Object)代表了當前的頁面是否與給定的鍵相關聯。
對於非常簡單的pageradapter或許你可以選擇用page本身作為鍵,在創建並且添加到viewgroup后instantiateItem方法里返回該page本身即可
destroyItem將會將該page從viewgroup里面移除。isViewFromObject方法里面直接可以返回view == object。
pageradapter支持數據集合的改變,數據集合的改變必須要在主線程里面執行,然后還要調用notifyDataSetChanged方法。和baseadapter非常相似。數據集合的改變包括頁面的添加刪除和修改位置。viewpager要維持當前頁面是活動的,所以你必須提供getItemPosition方法。
Summary
Constants | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
int | POSITION_NONE | ||||||||||
int | POSITION_UNCHANGED |
Public Constructors | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
PagerAdapter() |
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
void | destroyItem(ViewGroup container, int position, Object object)
移除給定位置的頁面
|
||||||||||
void | destroyItem(View container, int position, Object object)
該方法已廢棄.使用 destroyItem(ViewGroup, int, Object)替代
|
||||||||||
void | finishUpdate(View container)
該方法已廢棄.使用 finishUpdate(ViewGroup)代替
|
||||||||||
void | finishUpdate(ViewGroup container)
當顯示界面加載完成時調用該方法
|
||||||||||
abstract int | getCount()
返回可用的視圖數量.
|
||||||||||
int | getItemPosition(Object object)
如果item位置沒有發生改變則返回POSITION_UNCHANGED如果發生了改變則返回POSITION_NONE
|
||||||||||
CharSequence | getPageTitle(int position)
設置當前位置上的ViewPager的標題
|
||||||||||
float | getPageWidth(int position)
返回position位置測量的頁面的寬高比例范圍是(0.f-1.f]
|
||||||||||
Object | instantiateItem(ViewGroup container, int position)
根據指定的位置創建一個page item
|
||||||||||
Object | instantiateItem(View container, int position)
此方法已廢棄,使用 instantiateItem(ViewGroup, int)代替
|
||||||||||
abstract boolean | isViewFromObject(View view, Object object)
Determines whether a page View is associated with a specific key object as returned by
instantiateItem(ViewGroup, int) .
|
||||||||||
void | notifyDataSetChanged()
調用該方法更新數據
|
||||||||||
void | registerDataSetObserver(DataSetObserver observer)
注冊觀察者
|
||||||||||
void | restoreState(Parcelable state, ClassLoader loader)
恢復與adapter關聯的所有頁面的狀態實例,並且該頁面是通過saveState()方法保存的。
|
||||||||||
Parcelable | saveState()
保存於adapter關聯的所有的頁面,直到調用restoreState方法時被恢復
|
||||||||||
void | setPrimaryItem(View container, int position, Object object)
This method is deprecated. Use setPrimaryItem(ViewGroup, int, Object)
|
||||||||||
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(View container)
該方法已廢棄.使用 startUpdate(ViewGroup)代替
|
||||||||||
void | startUpdate(ViewGroup container)
開始調用顯示頁面
|
||||||||||
void | unregisterDataSetObserver(DataSetObserver observer)
在回調函數中通過adapter的數據變化注銷觀察者對象
|