美文网首页
Fragment懒加载,简单解决页面切换数据重新加载问题

Fragment懒加载,简单解决页面切换数据重新加载问题

作者: 林锦洲 | 来源:发表于2019-03-18 18:00 被阅读0次

前言

用过viewPage+Fragment的都知道当切换页面时,当页面切换超过2页,上上个页面会被销毁,重新切换回去时fragment会重新创建。下面2种方法可以解决fragment重新创建数据重新加载的问题。

一、setOffscreenPageLimit()

直接设置viewPage的setOffscreenPageLimit()setOffscreenPageLimit()方法设置的默认值是1。这个设置的值有两层含义: 一是 ViewPager 会预加载几页; 二是 ViewPager 会缓存 2*n+1 页(n为设置的值)。setOffscreenPageLimit()可以简单粗暴的解决数据重新加载问题。但是如果像今日头条有多个Fragment呢?那就可以用Fragment懒加载了

二、Fragment懒加载

保证只有第一次创建时会加载数据,代码如下:

public abstract class LazyloadFragment extends Fragment {

    private View mView;
    private boolean hasLoadData = false; // 是否已加载数据

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        mView= inflater.inflate(R.layout.fragment_lazyload, null);
        return mView;
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        // 如果setUserVisibleHint()在mView 创建前调用时,那么
        // 就等到rootView创建完后才回调onFragmentVisibleChange(true)
        // 保证onFragmentVisibleChange()的回调发生在mView 创建完成之后,防止mView == null
        if (getUserVisibleHint()) {
            if (!hasLoadData) {
                // 一般是第一次打开TabActivity页面时,当前Fragment会走这里
                loadData();
                hasLoadData = true;
            }
        }
        super.onViewCreated(view, savedInstanceState);
    }

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        // setUserVisibleHint在初始化Fragment的时候也会调用,且在onCreateView之前,所以mView会为null
        // mView是否初始化标志,防止回调函数在mView为空的时候触发
        if (mView == null) {
            return;
        }
        if (!hasLoadData && isVisibleToUser) {
            loadData();
            hasLoadData = true;
        }
    }

    private void loadData(){
        // 加载数据
    }
}

相关文章

  • Fragment懒加载,简单解决页面切换数据重新加载问题

    前言 用过viewPage+Fragment的都知道当切换页面时,当页面切换超过2页,上上个页面会被销毁,重新切换...

  • Fragment懒加载

    懒加载解决ViewPager中加载Fragment的问题

  • Android Fragment 切换

    fragment +切换/ 切换的原理是隐藏和显示fragment,fragment不需要重新加载。若有数据更新最...

  • fragment 懒加载

    fragment 的懒加载 懒加载 什么是懒加载:只有在 fragment 显示在界面的时候,才进行数据的加载 懒...

  • 关于Fragment与ViewPager,PageAdapter

    Fragment相关: 1.懒加载 1.懒加载需要解决的问题:1.Fragment一般配合ViewPager使用,...

  • Fragment 懒加载实战

    1 Fragment 懒加载是什么意思? 所谓懒加载,即Fragment 的 UI 对用户可见时才加载数据。 以前...

  • Fragment 懒加载实战

    1 Fragment 懒加载是什么意思? 所谓懒加载,即Fragment 的 UI 对用户可见时才加载数据。 以前...

  • Fragment 的懒加载,为什么 ViewPager.setO

    Fragment 懒加载是什么意思? 所谓懒加载,即Fragment 的 UI 对用户可见时才加载数据。 以前我没...

  • Fragment懒加载

    一、 Fragment懒加载 功能要求: 支持数据的懒加载并且只加载一次 提供 Fragment 可见与不可见时回...

  • 复习3

    vue路由懒加载 1.vue路由懒加载解决的什么 问题:解决打包后文件过大的问题,从而优化页面加载,提升性能 注意...

网友评论

      本文标题:Fragment懒加载,简单解决页面切换数据重新加载问题

      本文链接:https://www.haomeiwen.com/subject/joebmqtx.html