创建并初始化ViewPager
首先在xml文件中加入ViewPager 的声明:
<android.support.v4.view.ViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
再在Activity 中使用findViewById() 的方法初始化:
viewPager = (ViewPager) findViewById(R.id.view_pager);
创建视图,初始化视图集合
首先在layout目录下定义导航页的试图布局,再在Activity 中创建View 的集合并初始化。例如,定义了三个导航页的视图view_1, view_2 和view_3:
viewList = new ArrayList<View>();
LayoutInflater inflater = getLayoutInflater();
View v1 = inflater.inflate(R.layout.view_1, null);
View v2 = inflater.inflate(R.layout.view_2, null);
View v3 = inflater.inflate(R.layout.view_3, null);
viewList.add(v1);
viewList.add(v2);
viewList.add(v3);
上面先获得了LayoutInflater 的实例,再使用它的inflate方法将资源文件转化为View 对象。也可以使用View 的inflate() 方法实现相同的效果。
创建并初始化适配器,绑定适配器
新建一个类继承ViewPagerAdapter,重写其中的一些方法:
public class MyPagerAdapter extends PagerAdapter {
private List<View> viewList;
public MyPagerAdapter(List<View> list) {
viewList = list;
}
@Override
public int getCount() {
return viewList.size();
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(viewList.get(position));
return viewList.get(position);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(viewList.get(position));
}
}
这个类只需要一个成员viewList 用于保存页面资源,并在构造方法初始化;
下面有几个构造方法必须重写:
getCount()
用于返回ViewPager 中页面(View) 的数目
isViewFromObject()
官方推荐返回arg1 == arg0 的结果
instantiateItem()
初始化页面
destroyItem()
销毁页面
在系统运行的时候,会自动保存三个页面在内存中(当前页面、前一个和后一个),其他的页面被系统自动销毁。
自己的ViewPager 类写好以后,就可以在Activity 中初始化并绑定适配器了:
adapter = new MyPagerAdapter(viewList);
viewPager.setAdapter(adapter);
为ViewPager 设置监听器
如果有需要的话,可以使用addOnPageChangeListener() 方法为ViewPager 设置监听器:
viewPager.addOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
});
用removeOnPageChangeListener() 可以撤销监听器。