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.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