Android面试系列文章2018之Android部分之ViewPager篇

Android面试系列文章2018之Android部分之ViewPager篇

Android面试系列文章2018之Android部分之ViewPager篇_第1张图片

1.ViewPager是什么?

  ViewPager是android扩展包v4包中的类,这个类可以让用户左右切换当前的view。

  • 1)ViewPager类直接继承了ViewGroup类,所有它是一个容器类,可以在其中添加其他的view类。
  • 2)ViewPager类需要一个PagerAdapter适配器类给它提供数据。
  • 3)ViewPager经常和Fragment一起使用,并且提供了专门的FragmentPagerAdapter和FragmentStatePagerAdapter类供Fragment中的ViewPager使用。

2.ViewPager的适配器

  用过ListView或者RecyclerView都知道,凡是类似这种显示多个Item的控件,Android系统都设置成适配器模式了,因此ViewPager也需要适配器才能去显示数据,ViewPager的适配器就是PagerAdapter,它需要实现4个方法:

  • getCount():ViewPager显示的Item个数。
  • boolean isViewFromObject(View view, Object object):功能:该函数用来判断instantiateItem(ViewGroup, int)函数所返回来的Key与一个页面视图是否是代表的同一个视图(即它俩是否是对应的,对应的表示同一个View)
    返回值:如果对应的是同一个View,返回True,否则返回False。
  • Object instantiateItem(ViewGroup container, int position):这个函数的实现的功能是创建指定位置的页面视图。适配器有责任增加即将创建的View视图到这里给定的container中,这是为了确保在finishUpdate(viewGroup)返回时这个已经完成
    返回值:返回一个代表新增视图页面的Object
  • void destroyItem(ViewGroup container, int position, Object object):该方法实现的功能是移除一个给定位置的页面。适配器有责任从容器中删除这个视图。这是为了确保在finishUpdate(viewGroup)返回时视图能够被移除。

实例代码如下:

public class AdapterViewpager extends PagerAdapter {
    private List mViewList;

    public AdapterViewpager(List 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));
    }
}

3.ViewPager与Fragment的结合使用

3.1 常用的适配器(FragmentPagerAdapter&FragmentStatePagerAdapter)

FragmentPagerAdapter
FragmentStatePagerAdapter

3.2 ViewPager中Fragment的懒加载

https://blog.csdn.net/linglongxin24/article/details/53205878

3.3 ViewPager中Fragment的生命周期分析

https://blog.csdn.net/qq591920734/article/details/42490667

4.Banner图的制作原理解析

https://blog.csdn.net/qq_22770457/article/details/51198688

你可能感兴趣的:(android博客)