一、ViewPager是什么?
ViewPager的使用,除了用于View切换之外,还可用于Fragment切换。
单独使用Fragment经常会遇到一些问题,比如Fragment切换时,显示和隐藏的Fragment有时候会出现重叠,导致相互之间的UI和事件混乱。结合ViewPager的使用,则可以避免掉大部分的问题。
ViewPager是android扩展包v4包中的类,这个类可以让用户左右切换当前的view
1)ViewPager类直接继承了ViewGroup类,所有它是一个容器类,可以在其中添加其他的view类。
2)ViewPager类需要一个PagerAdapter适配器类给它提供数据。
3)ViewPager经常和Fragment一起使用,并且提供了专门的FragmentPagerAdapter和FragmentStatePagerAdapter类供Fragment中的ViewPager使用。
二、ViewPager的适配器
PagerAdapter和ListView等控件使用一样,需要ViewPager设置PagerAdapter来完成页面和数据的绑定,这个PagerAdapter是一个基类适配器,我们经常用它来实现app引导图。
它的子类有FragmentPagerAdapter和FragmentStatePagerAdapter,这两个子类适配器用于和Fragment一起使用。
1.实现一个最基本的PagerAdapter:
public class AdapterViewpager extends PagerAdapter {
private List<View> mViewList;
public AdapterViewpager(List<View> mViewList) {
this.mViewList = mViewList;
}
@Override
public int getCount() {
//必须实现
return mViewList.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
//必须实现
return view == object;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
//必须实现,实例化
container.addView(mViewList.get(position));
return mViewList.get(position);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
//必须实现,销毁
container.removeView(mViewList.get(position));
} }
2.实现一个最基本的FragmentPagerAdapter:
public class AdapterFragment extends FragmentPagerAdapter {
private List<Fragment> mFragments;
public AdapterFragment(FragmentManager fm, List<Fragment> mFragments) {
super(fm);
this.mFragments = mFragments;
}
@Override
/**
* 获取给定位置对应的Fragment。
*
* @param position 给定的位置
* @return 对应的Fragment
*/
public Fragment getItem(int position) {
//必须实现
return mFragments.get(position);
}
@Override
public int getCount() {
//必须实现
return mFragments.size();
}
@Override
public CharSequence getPageTitle(int position) {
//选择性实现
return mFragments.get(position).getClass().getSimpleName();
} }
/**
* 获取给定位置的项Id,用于生成Fragment名称
*
* @param position 给定的位置
* @return 项Id
*/
public long getItemId(int position) {
//选择实现
return position;
}
3.FragmentStatePagerAdapter的实现同FragmentPagerAdapter
三个适配器之间的区别:
PagerAdapter是基类适配器是一个通用的ViewPager适配器,
相比PagerAdapter,FragmentPagerAdapter和FragmentStatePagerAdapter更专注于每一页是Fragment的情况,而这两个子类适配器使用情况也是有区别的。
FragmentPagerAdapter适用于页面比较少的情况,FragmentStatePagerAdapter适用于页面比较多的情况。
只是摘录了自己需要的部分,节选自两片大神的文章
ViewPager
FragmentPagerAdapter