使用ViewPager实现导航页

创建并初始化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() 可以撤销监听器。



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值