【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的简单使用的介绍,下面贴出码云上的源码,供大家参考。