Android开发丶使用懒加载修复tablayout+viewpager+fragment的预加载
来源:互联网 发布:增广矩阵 求通解 编辑:程序博客网 时间:2024/05/19 04:51
何为预加载:
因为该处使用到了Fragment+Viewpager+Tablayout的组合实现分类,因为viewpager V4包的机制,导致了在加载一个fragment时候,默认会加载它左右两边的两个fragment,源码显示是通过viewpager.setoffscreenpagelimit(1)来控制预加载的fragment的数量,该处默认最小值就是1,设为0并无效果,因此从源码端取消预加载是行不通的,经过多方调研,通过下面的方法可实现效果
首先新建一个BaseFragment基类,如下:
public abstract class BaseFragment extends Fragment {
public Context mContext;
protected View view;
protected boolean isVisible;
/**
* 是否初始视图完成
*/
private boolean isPrepared;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = getActivity();
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = bindLayout(inflater);
initView();
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
//这里 初始化view的各控件 数据
isPrepared = true;
lazyLoad();
}
/**
* setUserVisibleHint是在onCreateView之前调用的
*
* @param isVisibleToUser
*/
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
/**
* 判断是否可见
*/
if(getUserVisibleHint()) {
isVisible = true;
//执行可见方法-初始化数据之类
onVisible();
} else {
isVisible = false;
//不可见
onInvisible();
}
}
/**
* 可见做懒加载
*/
private void onVisible() {
lazyLoad();
}
/**
* 懒加载
*/
private void lazyLoad() {
/**
* 判断是否可见,或者 初始化view的各控件
*/
if(!isVisible || !isPrepared) {
return;
}
//可见 或者 控件初始化完成 就 加载数据
initData();
}
/**
* 不可见-做一些销毁工作
*/
protected void onInvisible() {
}
/**
* 绑定布局
*
* @param inflater
* @return
*/
public abstract View bindLayout(LayoutInflater inflater);
/**
* 初始化布局
*/
public abstract void initView();
/**
* 初始化数据
*/
protected abstract void initData();
}
该基类Fragment核心方法为:
setUserVisibleHint,在该方法中判断目标fragment是否可见,当可见的时候执行组件初始化和数据读取
在目标Fragment继承BaseFragment
重写这三个方法
这样就解决了预加载导致的冲突问题!
- Android开发丶使用懒加载修复tablayout+viewpager+fragment的预加载
- Android开发ViewPager的预加载和Fragment的销毁问题,以及tabLayout+ViewPager的使用
- Tablayout+Viewpager+Fragment组合使用以及懒加载机制
- tablayout+viewpager+fragment组合使用以及懒加载机制
- Tablayout+viewpager+Fragment的数据加载问题
- TabLayout-ViewPager填充Fragment和懒加载
- TabLayout+ViewPager+Fragment懒加载实现
- TabLayout+ViewPager+Fragment实现懒加载
- TabLayout+ViewPager+fragment实现懒加载
- 解决TabLayout +ViewPager + Fragment 不让预加载的问题
- TabLayout+ViewPager 懒加载
- Android 在 ViewPager 中使用 Fragment 的懒加载
- Android的Viewpager+Fragment懒加载
- 巧力避免ViewPager的预加载数据,Tablayout+Fragment+viewPager
- 巧力避免ViewPager的预加载数据,Tablayout+Fragment+viewPager
- Android ViewPager + Fragment懒加载
- Android viewpager + fragment 的懒加载 只加载一次
- ViewPager+TabLayout+Fragment懒加载机制完全解析
- java__do while边界范围猜数
- BarChart使用详解及详细属性
- windows lua使用protobuf 环境生成
- Android App自定义签名文件的生成、查看SHA1值和使用
- PhpStorm侧边栏Project里面只显示文件不显示文件夹
- Android开发丶使用懒加载修复tablayout+viewpager+fragment的预加载
- POJ 1066 Treasure Hunt 笔记
- android studio 创建项目上传到oschina git
- JSTL标签库不起作用的解决方案 .
- End to End Sequence Labeling via Bi-directional LSTM CNNs CRF
- cookie和session的区别
- 在js中 正则表达式表单验证
- Spring容器
- 利用js模版引擎渲染html页面