之前以為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));
}