在使用v4包下的ViewPager的時候,難免會使用到它的擴充卡PagerAdapter。
直接上代碼吧,裡面的注釋就是我對相關方法的了解。
<pre name="code" class="java">viewPager = (ViewPager) findViewById(R.id.viewpager);
LayoutInflater inflater = LayoutInflater.from(this);
View tab01 = inflater.inflate(R.layout.tab01, null);
View tab02 = inflater.inflate(R.layout.tab02, null);
View tab03 = inflater.inflate(R.layout.tab03, null);
View tab04 = inflater.inflate(R.layout.tab04, null);
listV.add(tab01);
listV.add(tab02);
listV.add(tab03);
listV.add(tab04);
adapter = new PagerAdapter() {
//從ViewGroup中移出目前View
@Override
public void destroyItem(ViewGroup container, int position,
Object object) {
Log.i("TAG", position+"");
container.removeView(listV.get(position));
//再次添加出現過的page的時候會出錯,該方法保證當該頁面被滑過去之後就被容器所移除
/**
* 1.當處于page0的時候,下一步隻有滑向page1,此時該方法不會被調用
* 2.當從page0滑到page1的時候【處于page1的位置上】,下一步有兩個選擇【page0,page2】
* 2.1 如果滑向page0,則該方法被調用,此時position=2
* -->轉到步驟1
* 2.2 如果滑向page2,則該方法被調用,此時position=0
* 當處于page2的位置時,下一步有兩個選擇【page1,page3】
* 2.2.1如果滑向page1,則該方法被調用,此時position=3
* -->轉到步驟2
* 2.2.2如果滑向page3,則該方法被調用,此時position=1
* 當處于page3的時候,隻有向page2的滑動方向
*/
}
//這個對象表明了PagerAdapter擴充卡選擇哪個對象放在目前的ViewPager中
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(listV.get(position)); //将所用的page添加到父級容器中
return listV.get(position);
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
@Override
public int getCount() {
return listV.size();
}
};
viewPager.setAdapter(adapter);
根據我通過Log列印的方式檢視的結果,個人認為,當page在兩兩互相切換的過程中,會預先加載其左右的一個page。當最終确定滑動到下一個page的時候,另一個方向上預先加載的page就會被移除掉,此時會觸發destroyItem方法。