ViewPager基本用法

113 阅读2分钟

目录

1 添加ViewPager

2 创建Adapter类

3 在Adapter类中准备数据

4 重写适配器中的方法

4.1 重写getCount

4.2 重写isViewFromObject

4.3 重写instantiateItem

4.4 重写destroyItem

4.5 实例化

5 回到Avtivity,实例化适配器对象

6 主运行代码


用法:数据ImageView+自定义适配器+ViewPager控件

1 添加ViewPager

在Activity的XML布局文件中添加一个控件——ViewPager。

在Java代码中找控件ViewPager。

2 创建Adapter类

继承PagerAdapter类,重写必须重写的两个方法getCount和isViewFromObject。

并ctrl+o,重写两个生成控件和销毁控件的两个方法。

instantiateItem和destroyItem。

3 在Adapter类中准备数据

此处我们只展示一个图片ImageView。

即List<ImageView>。

4 重写适配器中的方法

4.1 重写getCount

获取列表中元素的个数。

public int getCount(){
    return mImageViewList==null?0:mImageViewList.size();
}

4.2 重写isViewFromObject

判断这个View和Object是不是同一个东西。而这个Object是什么,就是下一个要重写的instantiateItem方法的返回值。View就是这一页。

public boolean isViewFromObject(View view,Object object){
    return view==object;
}

4.3 重写instantiateItem

生成一页,也就是ImageView,也就是List列表中的一项。

而整个List就相当于一个ViewPager。

public Object instantiateItem(ViewGroup container,int position){
    //从列表中获取元素
    ImageView imageView=mImageViewList.get(position);
    //把此元素放入ViewGroup中
    container.addView(imageView);
    //返回此元素
    return imageView;
}

4.4 重写destroyItem

当从这一页划到另外一页时,前面那一页应该被销毁。

public void destroyItem(ViewGroup container,int position,Object object){
    super.destroyItem(container,position,object);
    //从ViewGroup中移除
    container.removeView((View)object);
}

4.5 实例化

public Adapter(List<ImageView> imageViewList){
    mImageViewList=imageViewList;
}

5 回到Avtivity,实例化适配器对象

准备数据并传入。

private void intiData(){
    ImageView imageView1=new ImageView(this);
    imageView1.setImageResource(R.id.xxx);
    
    ImageView imageView2=new ImageView(this);
    imageView2.setImageResource(R.id.xxx);

    ImageView imageView3=new ImageView(this);
    imageView3.setImageResource(R.id.xxx);

    mImageViews=new ArrayList<>();
    mImageViews.add(imageView1);
    mImageViews.add(imageView2);
    mImageViews.add(imageView3);
}

6 主运行代码

先进行第五步的数据初始化。

然后创建适配器对象。

然后给ViewPager设置适配器。

然后有必要的时候给ViewPager添加监听addOnPageChangeListener(new ViewPager.OnpageChangeLisgener()),有三个回调方法,最常用的是第二个onPageSelected(),

就是划定到某一页就会触发。