前言
最近在进行项目升级,将项目升级至AndroidX后,发现setUserVisibleHint()已经被弃用,并且无法实现ViewPager的懒加载。通过查询资料,发现AndroidX使用sexMaxLifecycle和修改FragmentPagerAdapter的方式实现懒加载。在此,仅记录一下我的项目中ViewPager+Fragment的简单实现。
基于AndroidX的懒加载生命周期网络上有很多博客已经写的很详细了,大家可以参考一下文章
androidx下fragment懒加载与生命周期演进过程 - 知乎
具体实现
创建一个基类BaseLazyFragment
public abstract class BaseLazyFragment extends Fragment {
/**
* 是否第一次加载数据
*/
private boolean firstLoad = true;
@Override
public void onResume() {
super.onResume();
//判断是否开始懒加载
if (firstLoad) {
firstLoad = false;
onLazyLoad();
}
}
/**
* 懒加载,你需要进行的数据初始化等操作
*/
protected abstract void onLazyLoad();
}
其中主Activity的部分代码为:
Fragments = new ArrayList<>();
//将四个Fragment加入集合中
mFragments.add(new KcFragment());
mFragments.add(new KcSearchFragment());
mFragments.add(new WlFragment());
mViewPager = (ViewPager) findViewById(R.id.id_viewpager);
//初始化适配器
mAdapter = new FragmentPagerAdapter(getSupportFragmentManager(), BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
@Override
public Fragment getItem(int position) {//从集合中获取对应位置的Fragment
return mFragments.get(position);
}
@Override
public int getCount() {//获取集合中Fragment的总数
return mFragments.size();
}
};
//不要忘记设置ViewPager的适配器
mViewPager.setAdapter(mAdapter);
KcFragment、KcSearchFragment、WlFragment继承BaseLazyFragment,重写onLazyLoad(),实现数据初始化等操作