Android Fragment懒加载 -内附完整代码

懒加载介绍

Fragment懒加载就是当Fragment可见的时候我们再去请求数据显示数据 Fragment的懒加载是解决Fragment配合ViewPager使用时的预加载,

预加载介绍

ViewPager有着预加载机制 默认一次加载当前页面前后两个页面,造成这种提前加载的问题是因为ViewPager内部的缓存机制,ViewPager为了在切换的时候防止出现卡顿的现象,提前把当前Fragment的左右Fragment都会加载好

多说无用直接贴代码:

首先 Fragment+ViewPager+TabLayout 形式

首先是联动

 mFragmentViewpager_tab=findViewById(R.id.FragmentViewpager_tab);
        mFragmentViewpager_viewpager=findViewById(R.id.FragmentViewpager_viewpager);
        final ArrayList<Fragment> fragments = new ArrayList<>();
        mList=new ArrayList<>();
        mList.add("首页");
        mList.add("精选");
        mList.add("食品");
        mList.add("手机");
        mList.add("生鲜");
        mList.add("电脑");
        mList.add("饮料");
        for (int i = 0; i < mList.size() - 1; i++) {
            fragments.add(BlankvpFragment.newInstance(mList.get(i)));
            mFragmentViewpager_viewpager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
                @NonNull
                @Override
                public Fragment getItem(int position) {
                    return fragments.get(position);
                }

                @Override
                public int getCount() {
                    return fragments.size();
                }

                @Nullable
                @Override
                public CharSequence getPageTitle(int position) {
                    return mList.get(position);
                }

            });
            mFragmentViewpager_tab.setupWithViewPager(mFragmentViewpager_viewpager);
        }

然后是 Fragment里面关键代码

首先定义几个参数标识

 /**
     * 是否初始化过布局
     */
    protected boolean initializeUI;
    /**
     * 当前界面是否可见
     */
    protected boolean isVisibleUI;
    /**
     * 是否加载过数据
     */
    protected boolean isLoad ;
onCreateView 设置一下初始化布局
 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_blankvp, container, false);
        initializeUI = true;
        return view;
    }

在onActivityCreated中通过isVisibleToUser来判断是否可以去请求数据

 @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        if (isVisibleUI){
            getData(arguments.getString(ARG_PARAM1));
        }
    }

在ViewPager 中Fragment 在切换的时候会将左右的Fragment  加载 生命周期还会执行 onResume

然后可变的值是setUserVisibleHint 中的 isVisibleToUser 对用户可见的时候为true 该方法是在Fragment生命周期方法之前执行的

setUserVisibleHint(boolean isVisibleToUser)

@Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        this.isVisibleUI = isVisibleToUser;
        Log.d("TAG", "setUserVisibleHint: "+isVisibleToUser);
        //判断是否对用户可见
        if (isVisibleToUser) {
            //多重判断 是否对用户可见 是否初始化ui 是否加载过数据
            if (isVisibleToUser && initializeUI && (!isLoad)) {
                getData(arguments.getString(ARG_PARAM1));
                //加载完成之后设置为flase
                isLoad = false;
            }
        }
    }

最后  onDestroyView 的时候 设置初始化ui为flase

@Override
    public void onDestroyView() {
        super.onDestroyView();

        initializeUI = false;
    }

这里framgent 懒加载就介绍完毕了

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android中ViewPager+Fragment取消(禁止)预加载延迟加载(懒加载)问题解决方案 方案是为解决特定问题或达成特定目标而制定的一系列计划或步骤。它的作用是提供一种系统性的方法,以有效地应对挑战、优化流程或实现目标。以下是方案的主要作用: 问题解决: 方案的核心目标是解决问题。通过系统性的规划和执行,方案能够分析问题的根本原因,提供可行的解决方案,并引导实施过程,确保问题得到合理解决。 目标达成: 方案通常与明确的目标相关联,它提供了一种达成这些目标的计划。无论是企业战略、项目管理还是个人发展,方案的制定都有助于明确目标并提供达成目标的路径。 资源优化: 方案在设计时考虑了可用资源,以最大化其效用。通过明智的资源分配,方案可以在有限的资源条件下实现最大的效益,提高效率并减少浪费。 风险管理: 方案通常会对潜在的风险进行评估,并制定相应的风险管理策略。这有助于减轻潜在问题的影响,提高方案的可行性和可持续性。 决策支持: 方案提供了决策者所需的信息和数据,以便做出明智的决策。这种数据驱动的方法有助于减少不确定性,提高决策的准确性。 团队协作: 复杂的问题通常需要多个人的协同努力。方案提供了一个共同的框架,帮助团队成员理解各自的职责和任务,促进协作并确保整个团队朝着共同的目标努力。 监控与评估: 方案通常包括监控和评估的机制,以确保实施的有效性。通过定期的评估,可以及时调整方案,以适应变化的环境或新的挑战。 总体而言,方案的作用在于提供一种有序、有计划的方法,以解决问题、实现目标,并在实施过程中最大化资源利用和风险管理。 方案是为解决特定问题或达成特定目标而制定的一系列计划或步骤。它的作用是提供一种系统性的方法,以有效地应对挑战、优化流程或实现目标。以下是方案的主要作用: 问题解决: 方案的核心目标是解决问题。通过系统性的规划和执行,方案能够分析问题的根本原因,提供可行的解决方案,并引导实施过程,确保问题得到合理解决。 目标达成: 方案通常与明确的目标相关联,它提供了一种达成这些目标的计划。无论是企业战略、项目管理还是个人发展,方案的制定都有助于明确目标并提供达成目标的路径。 资源优化: 方案在设计时考虑了可用资源,以最大化其效用。通过明智的资源分配,方案可以在有限的资源条件下实现最大的效益,提高效率并减少浪费。 风险管理: 方案通常会对潜在的风险进行评估,并制定相应的风险管理策略。这有助于减轻潜在问题的影响,提高方案的可行性和可持续性。 决策支持: 方案提供了决策者所需的信息和数据,以便做出明智的决策。这种数据驱动的方法有助于减少不确定性,提高决策的准确性。 团队协作: 复杂的问题通常需要多个人的协同努力。方案提供了一个共同的框架,帮助团队成员理解各自的职责和任务,促进协作并确保整个团队朝着共同的目标努力。 监控与评估: 方案通常包括监控和评估的机制,以确保实施的有效性。通过定期的评估,可以及时调整方案,以适应变化的环境或新的挑战。 总体而言,方案的作用在于提供一种有序、有计划的方法,以解决问题、实现目标,并在实施过程中最大化资源利用和风险管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值