【Android - V】之ViewPager的使用

ViewPager是Android V4包中的一个控件,常常用来作为首页的滚动广告,也常常结合Fragment来实现页面的切换效果。

ViewPager和ListView有很多相似的地方,都是适配器控件,要在其中展示数据,都需要设置适配器。ViewPager的常用的适配器类有两个:PagerAdapter和FragmentPagerAdapter,分别用来展示普通的布局页面和Fragment页面。下面我们来一一介绍。

1、ViewPager加载普通页面:

当我们需要使用ViewPager加载普通页面的时候,我们需要为ViewPager设置一个适配器,这个适配器必须是PagerAdapter的子类,因此,我们需要创建一个继承自PagerAdapter的子类,在这个类中实现或重写getCount()、isViewFromObject()、destroyItem()、instantiateItem()方法。

  • getCount()方法:获取ViewPager中的页数;
  • isViewFromObject()方法:ViewPager中的数据是否是直接从提供的数据源中加载的,一般返回view == object就可以了;
  • destroyItem()方法:从ViewPager中删除这一页,这个方法通常是删除三张以前的页面,其目的是资源回收。我们需要做的是从数据源中取出当前需要销毁的页面,调用removeView()方法删除即可。
  • instantiateItem()方法:加载页面方法。在这个方法中创建页面,适配数据,然后return。

具体的代码如下:

public class MyPageAdapter extends PagerAdapter {
private int[] resources; private List<View> views; private LayoutInflater inflater; public MyPageAdapter(Context context, int[] resources) {
this.resources = resources;
this.views = new ArrayList<>();
this.inflater = LayoutInflater.from(context);
} @Override
public int getCount() {
return resources.length;
} @Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
} @Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(views.get(position));
} @Override
public Object instantiateItem(ViewGroup container, int position) {
View view = inflater.inflate(R.layout.pageritem_page, container, false);
ImageView iv = (ImageView) view.findViewById(R.id.image);
iv.setImageResource(resources[position]);
container.addView(view);
views.add(view);
return view;
}
}

2、ViewPager加载Fragment:

当我们需要使用ViewPager加载Fragment的时候,我们需要为ViewPager设置的适配器类必须是FragmentPagerAdapter类的子类,并且实现其中的getCount()方法和getItem()方法。

  • getCount()方法:获取设置ViewPager中Fragment的数量
  • getItem()方法:根据position参数获取到当前加载的Fragment对象

具体的代码如下:

public class MyPagerAdapter extends FragmentPagerAdapter {
private List<Fragment> fragments; public MyPagerAdapter(FragmentManager fm) {
super(fm);
} public void setFragments(List<Fragment> fragments) {
this.fragments = fragments;
} @Override
public Fragment getItem(int position) {
return fragments.get(position);
} @Override
public int getCount() {
return fragments.size();
}
}

以上就是对ViewPager的简单使用的介绍,下面贴出码云上的源码,供大家参考。

DEMO地址

上一篇:利用Highcharts插件制作动态图表


下一篇:Json序列化循环引用的问题