天天看點

關于PagerAdapter的instantiateItem方法

之前以為ViewPager每次滑動都會調用instantiateItem,後來做項目時發現有時滑動時并不執行寫在instantiateItem中的一些更新操作。于是寫了個demo測試一下,代碼如下:

public class MainActivity extends Activity { ViewPager pager; List<View> views; 

@Override 

protected void onCreate(Bundle savedInstanceState) { 

super.onCreate(savedInstanceState); 

setContentView(R.layout.activity_main); 

pager = (ViewPager)findViewById(R.id.view_pager); 

views = new ArrayList<View>(); 

LayoutInflater mLi = LayoutInflater.from(this); 

View view1 = mLi.inflate(R.layout.view1, null); 

View view2 = mLi.inflate(R.layout.view2, null);

 View view3 = mLi.inflate(R.layout.view3, null);

 views.add(view3); 

views.add(view2);

 views.add(view1);

 MyPagerAdapter adapter = new MyPagerAdapter();

 pager.setAdapter(adapter); }

 class MyPagerAdapter extends PagerAdapter{ 

public int getCount() { 

// TODO Auto-generated method stub 

return views.size(); } 

public boolean isViewFromObject(View arg0, Object arg1) {

 // TODO Auto-generated method stub 

return arg0 == arg1; //這行代碼很重要,它用于判斷你目前要顯示的頁面 

}

 @Override 

public Object instantiateItem(ViewGroup container, int position) { container.addView(views.get(position));

 Log.d("tag",String.valueOf(position)); 

return views.get(position); 

public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(views.get(position)); 

 }

繼續閱讀