天天看點

ViewPager的PagerAdapter的介紹

官方英語原文位址:http://developer.android.com/reference/android/support/v4/view/PagerAdapter.html

(它是)基類,它提供擴充卡,該擴充卡能填充頁面内容到ViewPager中。

你可能更喜歡使用它的特殊實作類,比如:FragmentPagerAdapter 或FragmentStatePagerAdapter。

當你實作一個PageAdapter的時候,你至少必須要重載(override)下面幾個方法:

· instantiateItem(ViewGroup, int)--執行個體化條目

· destroyItem(ViewGroup, int, Object)--銷毀條目

· getCount()--擷取條目數量

· isViewFromObject(View, Object)

PagerAdapter,比AdapterViews所使用的擴充卡,更常用。

在更新過程中,ViewPager使用回調(callbacks),來訓示到哪一步了,而不是提供一套View直接回收的機制。

如果需要的話,PagerAdapter可以實作一種View回收機制,或者使用一個更加複雜的方法,來管理page view,

例如,Fragment的處理方式:每個頁面都由它自己的Fragment來展現。

ViewPager都關聯一個key對象,而不是直接與Views關聯。

這個key用來跟蹤并唯一辨別指定的頁面,它獨立于其在擴充卡中的位置。

對PagerAdapter的startUpdate(ViewGroup)方法的一次調用,标志着ViewPager的頁面内容即将改變。

随後,會調用若幹次instantiateItem(ViewGroup, int) 或destroyItem(ViewGroup, int, Object),

最後,會調用 finishUpdate(ViewGroup),這意味着本次更新将要結束了。

等到finishUpdate傳回時,與instantiateItem傳回的key對象關聯的view,應該被添加到其父控件ViewGroup中了,

而與傳遞給

destroyItem

 的這些key關聯的view,應該被移除了。

isViewFromObject(View, Object)方法用于判斷某個view是否與key對象關聯。

一個簡單的PagerAdapter,可以用page Views本身當為key對象;

建立并添加到ViewGroup中後,可以instantiateItem(ViewGroup, int)中傳回它;

對應的destroyItem(ViewGroup, int, Object)的實作,從父控件ViewGroup中删除它;

isViewFromObject(View, Object) 可以這樣實作:return view == object;.

PagerAdapter支援資料集(data set)的變更更新。

但資料集變更,必須發生在主線程中,并且最後要調用notifyDataSetChanged()方法,

這點與從BaseAdapter派生的AdapterView的擴充卡,很相似。

資料集的改變,可以包含pages的添加,删除或位置改變。

ViewPager将保持目前的頁面處于active狀态,它由實作了getItemPosition(Object)方法的擴充卡提供。

public Object instantiateItem (ViewGroup container, int position)

在指定的位置建立頁面;擴充卡負責添加view到這個容器中,然而它隻保證在finishUpdate(ViewGroup)傳回時才完成。

public void destroyItem (ViewGroup container, int position, Object object)

删除指定位置的頁面;擴充卡負責從view容器中删除view,然而它隻保證在finishUpdate(ViewGroup)傳回時才完成。

public abstract int getCount ()

傳回可用的view的數量。

public abstract boolean isViewFromObject (View view, Object object)

判斷頁面是否跟指定的key對象關聯,key對象由instantiateItem(ViewGroup, int)傳回。