一、viewPager使用PagerAdapter 必须要实现4个函数
getCount();
isViewFromObject();
instantiateItem();
destroyItem();
二、ViewPager中嵌套Fragment 使用
1)FragmentPagerAdapter
该类内的每一个生成的 Fragment 都将保存在内存之中,因此适用于那些相对静态的页,数量也比较少的那种;
2)FragmentPagerStateAdapter
该类的实现将只保留当前页面,当页面离开视线后,就会被消除,释放其资源;而在页面需要显示时,生成新的页面(就像ListView 的实现一样)。这么实现的好处就是当拥有大量的页面时,不必在内存中占用大量的内存。
注意:
只需要实现三个函数
1)FragmentPagerStateAdapter(fragmentManager ft)、FragmentPagerAdapter (fragmentManager ft)
//如果viewpager在Fragment中fragmentManager 需要是用getChildFragmentManager()
2)getItem()
3)getCount()
如需要动态的加载数据刷新UI则实现
mTabNavigation.setOnPageChangeListener(newViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(intposition) {
//将异步加载的数据再此处刷新到Fragment中
}
//…此处省略 其他两个重载方法
});
三、不显示问题:重写如下方法会导致不显示内容
Public boolean isViewFromObject(Viewview,Objectobject){
Return view==object ;
}
四、关于Fragment嵌套PagerSlidingTapStrip
在遇到不显示数据的情况,一般会认为是 设置pagerslidingTabStrip 的问题,其实不显示数据大多数是因为设置viewPager的不正确而导致的问题,
pagerslidingTabStrip只负责将ViewPagerPager和Tab绑定在一起。实现点击tab滑到对应的viewpager中。
唯一需要注意的的是要在PagerAdapter、FragmentPagerAdapter、FragmentPagerState中重载如下方法:
因为父类的方法中返回的是空,导致tab获取不到字符串,所以要重载该方法。
Public |
CharSequencegetPageTitle(intposition){ |
Return 保存tab字符串的数组:tasString[position];
}