androidx中fragment懒加载问题
android support下的fragment懒加载通过setUserVisibleHint实现,但在androidx中已过期,源码提示使用FragmentTransaction#setMaxLifecycle使用FragmentTransaction.setMaxLifecycle的方法可以看到可以看到熟悉的FragmentPagerAdapter类看...
·
android support下的fragment懒加载通过
setUserVisibleHint实现,但在androidx中已过期,源码提示使用
FragmentTransaction#setMaxLifecycle
使用FragmentTransaction.setMaxLifecycle的方法可以看到

可以看到熟悉的
FragmentPagerAdapter类
看
fragment.setUserVisibleHint(true)的条件,
mBehavior == BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT,后者为常量,看到mBehavior的赋值通过构造方法
我们加载fragment的一种方式
public class SectionsPagerAdapter extends FragmentPagerAdapter {
private String[] mTitles;
private List<Fragment> mFragments;
/**
* @param fm FragmentManager getSupportFragmentManager or getChildFragmentManager()
* @param behavior FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT 懒加载
* @param mTitles 标题
* @param mFragments fragment
*/
public SectionsPagerAdapter(@NonNull FragmentManager fm, int behavior, String[] mTitles, List<Fragment> mFragments) {
super(fm, behavior);
this.mTitles = mTitles;
this.mFragments = mFragments;
}
@NonNull
@Override
public Fragment getItem(int position) {
return mFragments.get(position);
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return mTitles[position];
}
@Override
public int getCount() {
return mFragments == null ? 0 : mFragments.size();
}
}
看到fragment生命周期的执行,反复切换fragment,onResume会重新执行

简单写了一下,问题是这么解决的,有兴趣的可以加载fragment时测试分别设置观察fragment的生命周期
mCurTransaction.setMaxLifecycle(fragment, Lifecycle.State.RESUMED),
mCurTransaction.setMaxLifecycle(fragment, Lifecycle.State.STARTED),
更多推荐


所有评论(0)