Android面试系列文章2018之Android部分之ViewPager篇
Android面试系列文章2018之Android部分之ViewPager篇
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<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));
}
}
3.ViewPager与Fragment的结合使用
3.1 常用的适配器(FragmentPagerAdapter&FragmentStatePagerAdapter)
FragmentPagerAdapter
FragmentStatePagerAdapter
3.2 ViewPager中Fragment的懒加载
https://blog.****.net/linglongxin24/article/details/53205878
3.3 ViewPager中Fragment的生命周期分析
https://blog.****.net/qq591920734/article/details/42490667