ViewPager相关笔记

来源:互联网 发布:改本地host变更域名 编辑:程序博客网 时间:2024/05/29 03:17

只有步骤,备用

ViewPager-PagerAdapter

布局控件

在activity的布局文件中添加控件,控件标记名称为:
android.support.v4.view.ViewPager
有两个子控件:
android.support.v4.view.PagerTitleStrip(会在tab标题的上面,但是不知道怎么随着页面的左右滚动切换,所以暂时不知道如何使用这个控件)
android.support.v4.view.PagerTabStrip(每个tab页面的标题,会随着页面的左右滚动切换)

另外还有各个页面的布局文件,和平时的页面写法一样,不说了

获取控件对象并操作

在activity中使用findViewById()获取到控件的对象
上面说了因为不知道PagerTitleStrip如何自动切换,所以暂时不使用这个控件,并且PagerTabStrip也足够了
获取到PagerTabStrip的对象,使用其方法可以设置tab标题指示器的样式
获取到ViewPager的对象,主要使用其setAdapter()方法

生成各个页面

使用LayoutInflater对象的inflate()方法,加载各个页面的布局文件,获取到各个页面View类型的对象
然后把这些获取到的页面对象放到一个ArrayList<View>里面去,等下提供数据给适配器
另外,把每个页面的tab标题,放到一个ArrayList<String>里面去,也提供给适配器

适配器

写一个类继承PagerAdapter,主要重写PagerAdapter的以下方法:

//获取页面数量@Overridepublic int getCount() {    // TODO Auto-generated method stub    return myListViews.size();}//这个不清楚作用,但也必须重写,重写内容如下@Overridepublic boolean isViewFromObject(View arg0, Object arg1) {    // TODO Auto-generated method stub    return arg0==arg1;}//初始化的作用吧,在这里添加页面到页面容器//父类还有另一个重载的方法(参数不同),重写任意一个应该都可以//myListViews是上面提到的ArrayList<View>,里面存放View类型的页面的对象@Overridepublic Object instantiateItem(ViewGroup container, int position) {    // TODO Auto-generated method stub    container.addView(myListViews.get(position));    return myListViews.get(position);}//销毁、去掉页面@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {    // TODO Auto-generated method stub    container.removeView(myListViews.get(position));}//在这里添加标题数据到标题容器//myListPagerTabs是上面提到的ArrayList<String>,里面存放的是String类型的页面标题@Overridepublic CharSequence getPageTitle(int position) {    // TODO Auto-generated method stub    return myListPagerTabs.get(position);}

写好适配器类之后就可以使用ViewPager对象的setAdapter()方法绑定上去了

ViewPager-FragmentPagerAdapter

基本和ViewPager+PagerAdapter一样,只是需要写几个fragment类和对应的页面的布局文件,每一个页面都是一个fragment,这些学习过fragment相关的知识就会了

不一样的地方:
1、上面的ArrayList<Fragment>,里面存放的东西也就是你写的fragment的对象了
2、重写父类FragmentPagerAdapter的具体方法

//只需要重写下面三个就行了@Overridepublic Fragment getItem(int arg0) {    // TODO Auto-generated method stub    return myListViews.get(arg0);}@Overridepublic int getCount() {    // TODO Auto-generated method stub    return myListViews.size();}@Overridepublic CharSequence getPageTitle(int position) {    // TODO Auto-generated method stub    return myListTabs.get(position);}
0 0