Androidx-fragment1.1.0版本实现懒加载

作者 : 开心源码 本文共2013个字,预计阅读时间需要6分钟 发布时间: 2022-05-13 共204人阅读

更新为Androidx后,fragment在1.1.0发生少量变化
setUserVisibleHint方法给标注为Deprecated提醒用setMaxLifecycle实现懒加载

@Deprecated    public void setUserVisibleHint(boolean isVisibleToUser) {        if (!mUserVisibleHint && isVisibleToUser && mState < STARTED                && mFragmentManager != null && isAdded() && mIsCreated) {            mFragmentManager.performPendingDeferredStart(this);        }        mUserVisibleHint = isVisibleToUser;        mDeferStart = mState < STARTED && !isVisibleToUser;        if (mSavedFragmentState != null) {            // Ensure that if the user visible hint is set before the Fragment has            // restored its state that we don't lose the new value            mSavedUserVisibleHint = isVisibleToUser;        }    }

在以前我们实现viewpager的懒加载,都通过setUserVisibleHint和onActivityCreated结合一起判断当前fragment能否展现出来

    private boolean isViewCreated; // 界面能否已创立完成    private boolean isVisibleToUser; // 能否对客户可见    private boolean isDataLoaded; // 数据能否已请求    // 实现具体的数据请求逻辑    protected abstract void loadData();    @Override    public void setUserVisibleHint(boolean isVisibleToUser) {        super.setUserVisibleHint(isVisibleToUser);        this.isVisibleToUser = isVisibleToUser;        tryLoadData();    }    @Override    public void onActivityCreated(@Nullable Bundle savedInstanceState) {        super.onActivityCreated(savedInstanceState);        isViewCreated = true;        tryLoadData();    }    public void tryLoadData() {        if (isViewCreated && isVisibleToUser && !isDataLoaded) {            WLog.i(TAG, getName() + ".tryLoadData");            loadData();            isDataLoaded = true;        }    }

现在在新版本的fragment不需要判断那么,直接在onResume判断能否展现

    private boolean isLoad;    @Override    public void onResume() {        super.onResume();        tryLoad();    }    private void tryLoad() {        if (!isLoad) {            WLog.i(TAG, getName() + ".tryLoad");            loadData();            isLoad = true;        }    }    public abstract void loadData();

仅仅这样还不够,由于刚才提到setMaxLifecycle方法来实现的,我们还需要调整viewpager的adapter来控制setMaxLifecycle

public class MaxLifecyclePagerAdapter extends FragmentPagerAdapter {    private List<Fragment> fragments;    private List<String> titles;    public MaxLifecyclePagerAdapter(FragmentManager fm) {        super(fm, FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);    }    public void setData(List<Fragment> fragments, List<String> titles) {        this.fragments = fragments;        this.titles = titles;    }}

就是在super方法传进FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT方法就能实现在onResume实现懒加载方式,比之前代码简单多了

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Androidx-fragment1.1.0版本实现懒加载

发表回复