万能的Tablayout+Viewpager+Frgment 做Viewapger的缓存。
Tablayout+Viewpager+Frgment 做Viewapger的缓存,并且第一次点击tab都去刷新,但是第二次之后都有缓存且不会自动刷新可以主动刷新。
需要实现这个首先你需要了解fragment的一个方法
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
}
fragment的这个方法不在fragment的生命周期里面,当你让这个fragment显示的时候为true就会自动调用这个方法。
意思就是当我们点击tab按钮的时候,fragment就会去自动调用这个方法,那么我们是不是直接在这个方法里面做fragment的刷新就可以了呢?答案是不行的。
为什么?因为这个方法会在onCreateVIew之前调用,那么就代表了你获取到网路数据的时候去更新Ui就会报错,因为你的
SwipeRefreshLayout或者RecycelrView没有调用findById,没有绑定控件,那么我们就需要在第一个framgne单独提出来,其他之后的所有fragmnet都用一个fragment,因为只有第一个framgent才会出现先执行setUserVisibleHint,后执行OnCreateView方法
需要实现主要与以下几个重要条件:
1、viewPager.setOffscreenPageLimit(list_fragment.size()-1);//缓存所有fragment
2、
/**
* 当这个fragment显示的时候就去刷新,就是当你点击tab的时候并且是第一次点击就去刷新
*
* @param isVisibleToUser
*/
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
Log.e("isVisibleToUser", isVisibleToUser + "");
if (isVisibleToUser && list == null) {//这个页面是显示的,并且list==null表示第一次创建的时候才去刷新,第二次打开这个//fragment list就不=null了
swipeRefresh.setRefreshing(true);
onRefresh();
}
}
内置apk文件可安装
遇到问题可以加我qq:659966631
项目下载连接:https://download.csdn.net/download/fayangzhou/10670186