天天看點

PagerAdapter的幾個方法

在使用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方法。