探究Fragment(内含懒加载实现)

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

Fragment

什么是Fragment

为了让界面可以在平板上更好的展示,Android在3.0版引入了Fragment功能,它非常类似于Activity,可以像Activity一样包含布局,但比Activity更加轻量。Fragment通常嵌套在Activity中使用。Activity作为视图的承接和管理在很多场景下过与繁重,需要一个简化的视图管理器来替代Activity的操作。

Fragment的生命周期

在这里插入图片描述

这是Activity与Fragment生命周期的关系图,可以看出,Fragment的生命周期是与Activity极为相似的,但比Activity多了几个方法:

  • onAttach

    当Fragment与Activity关联时调用。在这个阶段,我们可以用来传入初始的参数。可以将context转化成Activity保存下来,避免后期频繁的获取Activity。这样传入参数会导致Fragment重建时初始化参数丢失;如果不想丢失初始化参数,就应该把参数用setArgument来注入,这样重建时就会自动从Argument中取出参数。

  • onCreateView

    创建该Fragment的视图。

  • onActivityCreated

    当Activity中的onCreate方法执行完时调用。

  • onDestroyView

    与onCreateView方法相对应,当该Fragment的视图被移除时调用。

    当使用replace的时候,只会走到当前状态,而不会继续回调到onDestroy,这样是因为在销毁视图的同时,Fragment状态得以保留,方便下次加载时可以直接走onCreateView,比冷加载更快。

  • onDetach

    Fragment和Activity解除关联时调用。

生命周期的场景:

  • 创建Fragment: onAttach() —> onCreate() —> onCreateView() —> onActivityCreated() —> onStart() —> onResume()

  • 按下Home键回到桌面 / 锁屏 :onPause() —> onStop()

  • 从桌面回到Fragment / 解锁: onStart() —> onResume()

  • 切换到其他Fragment: onPause() —> onStop() —> onDestroyView()

  • 切换回本身的Fragment: onCreateView() —> onActivityCreated() —> onStart() —> onResume()

  • 按下Back键退出: onPause() —> onStop() —> onDestroyView() —> onDestroy() —> onDetach()

Fragment的使用

静态使用

  1. 创建一个类继承Fragment,重写onCreateView方法,来确定Fragment要显示的布局。
  2. 在布局文件中添加fragment,使用与普通View无异。
public class MyFragment extends Fragment {

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.myfragment_layout,container,false);
    }
    
}
<fragment
    android:id="@+id/myfragment"
    android:name="com.nullpointerexception.task1.MyFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

这样,我们的Fragment就嵌入了Activity。

动态使用

  1. 在Activity对应的布局中写一个FramLayout用来指定Fragment添加的位置,这样添加Fragment就可以灵活的展示在你想要的位置。

  2. 编写类继承Fragment,与静态使用无异。

  3. 在Activity中,创建FragmentManager。

  4. 使用FragmentManager实例化出FragmentTransaction。

  5. 调用transaction的方法对Fragment进行添加替换。

  6. 最后不要忘记commit事务。

MyFragment fragment = new MyFragment();
getSupportFragmentManager()
        .beginTransaction()
        .add(R.id.fragment,fragment)
        .commit();

transaction中方法介绍:

  • add:向Activity中添加一个Fragment
  • remove:从Activity中移除一个Fragment,如果被移除的Fragment没有添加到回退栈,这个Fragment实例将会被销毁。
  • replace:使用一个Fragment替换当前的Fragment。
  • hide:隐藏当前的Fragment,仅设为不可见,并不销毁。
  • show:显示之前隐藏的Fragment。
  • detach:将View从UI中移除,和remove不同,此时Fragment的状态依然由FragmentManager维护。
  • attach:重建View视图,附加到UI上并显示。
  • commit:提交事务。

Fragment的回退栈

Fragment回退栈是用来保存每一次Fragment事务发生的变化。如果将Fragment任务添加到回退栈,当用户点击返回按钮时,将看到上一次保存的Fragment。一旦Fragment完全从回退栈中弹出,用户再次点击返回键,则退出当前Activity。

如何添加到回退栈?使用addToBackStack。

transaction的replace方法相当于remove和add的结合体,如果不添加事务到回退栈,前一个Fragment实例便会被销毁。如果调用了addToBackStack方法,前一个Fragment的实例不会被销毁,但视图层次依然被销毁,即会调用onDestroyView方法,使用onCreateView重建。

Fragment与Activity之间通信

  • 在Fragment可以通过getActivity得到当前绑定的Activity的实例,然后进行操作。
  • 数据库
  • handler
  • 回调
  • Eventbus
  • 广播

为何视图控制器建议使用Fragment而不是Activity

  • Fragment可以被混淆,Activity不行
    • Android中我们一般使用ProGuard进行代码混淆,但是ProGuard是Java的混淆器,他不能混淆XML文件,这样就会导致如果Activity被混淆,那么Manifest就会找不到Activity文件而导致程序崩溃;四大组件中的其它三个也类似;view也类似(在layout的文件中的指定文件包名))
  • Fragment不是组件,资源占用更少
  • 切换速度比Activity快太多

懒加载

场景一:ViewPager + TabLayout + Fragment

ViewPager在左右滑动向用户展示数据时,会预加载左右的界面,当你滑动到下一页的时候,Fragment中的数据已经加载好了。

即使通过设置viewPager.setOffscreenPageLimit(0);也会加载一项,因为当你传入参数小于1时会使用默认值,也就是1。

public class ViewPagerFragment extends Fragment {

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

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        String label = getArguments().getString("label");
        TextView textView = getView().findViewById(R.id.tv);
        new Thread(() -> {
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            textView.post(() -> textView.setText(label));
        }).start();
    }
    
    public static ViewPagerFragment newInstance(String label){
        Bundle args = new Bundle();
        args.putString("label", label);
        ViewPagerFragment fragment = new ViewPagerFragment();
        fragment.setArguments(args);
        return fragment;
    }
}

这里使用子线程睡眠一秒模拟从网上获取数据。可以发现ViewPager在未显示出左右两边的Fragment时也会预加载。这可能导致用户流量的浪费。秉着从用户角度出发,需要在显示此Fragment时在加载相关的数据,否则就不加载。这时我们就要用到Fragment中的一个方法:setUserVisibleHint。这个方法是Fragment中的一个回调方法。当前Fragment对用户可见时,setUserVisibleHint回调,其中参数isVisibleToUser=true。当前Fragment由可见到不可见或者实例化时,setUserVisibleHint回调,其中参数isVisibleToUser=false。

按照上面的规则,我们一般在onActivityCreated中加载数据,这时候只要判断Fragment是否对用户可见,调用fragment.getUserVisibleHint可以获得isVisibleToUser的值,如果为true,表示可见,就加载数据,如果不可见,就不加载数据。预加载时,我们的Fragment生命周期已经走到了onResume,当我们切换到下一个Fragment时,只要在setUserVisibleHint方法中添加加载数据的方法,就可以实现懒加载。注意,我们此时应该设置一个标志位,来记录数据是否加载过,如果加载过,则不重复加载,因为我们在ViewPager间来回切换时会回调多次setUserVisibleHint方法。

这是androidx 1.1.0之前实现懒加载的方式,在android 1.1.0之后,setUserVisibleHint方法被废弃,官方推荐我们使用setMaxLifecycle来管理Fragment的生命周期,同时,也提供了新的懒加载实现方式。setMaxLifecycle是FragmentTransaction中的一个方法,使用和add等方法相同,它有两个参数,第一个自然是我们的Fragment,第二个是Lifecycle.State。State是一个枚举类:

public enum State {
        /**

   		* Destroyed state for a LifecycleOwner. After this event, this Lifecycle will not 		  *dispatchmore events. For instance, for an {@link android.app.Activity}, this 		*state is reached
        * <b>right before</b> Activity's {@link android.app.Activity#onDestroy() 				*onDestroy} call.
        */

	DESTROYED,
/**
     * Initialized state for a LifecycleOwner. For an {@link android.app.Activity}, this is
     * the state when it is constructed but has not received
     * {@link android.app.Activity#onCreate(android.os.Bundle) onCreate} yet.
     */
    INITIALIZED,

    /**
     * Created state for a LifecycleOwner. For an {@link android.app.Activity}, this state
     * is reached in two cases:
     * <ul>
     *     <li>after {@link android.app.Activity#onCreate(android.os.Bundle) onCreate} 		 * call;
     *     <li><b>right before</b> {@link android.app.Activity#onStop() onStop} call.
     * </ul>
     */
    CREATED,

    /**
     * Started state for a LifecycleOwner. For an {@link android.app.Activity}, this 		 * state
     * is reached in two cases:
     * <ul>
     *     <li>after {@link android.app.Activity#onStart() onStart} call;
     *     <li><b>right before</b> {@link android.app.Activity#onPause() onPause} call.
     * </ul>
     */
    STARTED,

    /**
     * Resumed state for a LifecycleOwner. For an {@link android.app.Activity}, this state
     * is reached after {@link android.app.Activity#onResume() onResume} is called.
     */
    RESUMED;

    /**
     * Compares if this State is greater or equal to the given {@code state}.
     *
     * @param state State to compare with
     * @return true if this State is greater or equal to the given {@code state}
     */
    public boolean isAtLeast(@NonNull State state) {
        return compareTo(state) >= 0;
    }
}

在setMaxLifecycle中接收的生命周期状态要求不能低于CREATED,否则会抛出一个IllegalArgumentException的异常。

当我们设置为CREATED的时候,Fragment的生命周期走到onCreate就会停下,并且Activity中不会显示Fragment。当我们的Fragment已经执行到了onResume,此时设置为CREATED,Fragment会依次回调onPause、onStop、onDestroyView。其余情况类似。所以得出结论:

通过setMaxLifecycle方法可以精确控制Fragment生命周期的状态,如果Fragment的生命周期状态小于被设置的最大生命周期,则当前Fragment的生命周期会执行到被设置的最大生命周期,反之,如果Fragment的生命周期状态大于被设置的最大生命周期,那么则会回退到被设置的最大生命周期。

知道了这些,如何去实现懒加载呢?androidx 1.1.0版本中的FragmentStatePagerAdapter已经帮我们实现了,只需要传入简单的参数即可。

BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT

将behavior参数设置成这个,就意味着当前可见的Fragment会被执行到onResume,而其他不可见的Fragment的生命周期只会执行到onStart。这样,懒加载的实现就及其简单了,只要在onResume中判断是否是第一次加载该数据即可。

场景二:FragmentManager + FragmentTransaction+ Fragment

这种场景通常用在配合底部tab使用,类似微信底部tab切换页面。通常这种切换是配合FragmentTransaction的hide和show方法使用。当Fragment被add我们的FragmentManager时,Fragment中已经有数据了,但这违背了我们想要实现的懒加载。照搬场景一的老方法?但setUserVisibleHint又不会被回调,何况已被废弃。这时,有一个方法就可以派上用场:onHiddenChanged(boolean hidden)

onHiddenChanged方法是当Fragment的隐藏状态变化示被调用,当Fragment没有被隐藏时即调用show方法,当前onHiddenChanged回调,其中参数hidde=false,当Fragment被隐藏时即调用hide了方法,onHiddenChanged()回调,其中参数hidde=true。还有一点注意的是使用hide和show时,fragment的所有生命周期方法都不会调用,除了onHiddenChanged()。

@Override
public void onHiddenChanged(boolean hidden) {
    super.onHiddenChanged(hidden);
    //1、onHiddenChanged调用在Resumed之前,所以此时可能fragment被add, 但还没resumed
    if(!hidden && !this.isResumed())
        return;
    //2、使用hide和show时,fragment的所有生命周期方法都不会调用,除了onHiddenChanged()
    if(!hidden && isFirstVisible && this.isAdded()){
        onLazyLoadData();
        isFirstVisible = false;
    }
}

Fragment至此也就介绍完了,Fragment提供给我们一个非常优秀的实现界面的方式,Google也是将其收录到了Jetpack中,足以证明其实用价值。掌握好了Fragment,不仅适配了平板端,减少了代码复用,提高开发效率,更使我们的界面轻量化。

Duilib的简单使用(五、DuiDesigner/DuiEditor的下载编译) 一、前言 在Duilib的简单使用(一、duilib demo)中我们介绍了利用duilib简单的构造一个项目 在Duilib的简单使用(二、xml实现界面与业务分离)中我们介绍了XML在duilib中的使用 在Duilib的简单使用(三、界面逻辑交互)中我们已经知道如何简单的进行界面的交互 在Duilib的简单使用(四、换肤)中,我们提了一下Duilib强大的一键换肤功能。 通过之前的说明,我们知道duilib是通过xml来分离界面和业务逻辑的,但是xml如果不能预览,那每次敲一个再运行一下看看效果,这不 阅读详情

相关推荐

Win11下VSCode配置Python虚拟环境:从venv原理到高效开发实战

Python虚拟环境是解决项目依赖冲突、保障环境隔离性的核心技术,其核心原理是通过创建独立的Python解释器与包目录,实现不同项目间的依赖隔离。在工程实践中,虚拟环境能确保开发、测试与部署环境的一致性,提升代码的可复现性与团队协作效率。对于Windows 11平台下的Python开发者,结合轻量强大的VSCode编辑器,可以构建一套标准化的开发工作流。本文以Python内置的venv模块为例,详解如何在VSCode中创建、激活与管理虚拟环境,并配置自动化终端激活、代码格式化(如autopep8)与调试功能

weixin_33693070的博客 427

android混淆那些坑

ProGuard简介在最新的Android Studio 2.2.2版本创建的Android工程中,module中的build.gradle有如下一段配置。这里的minifyEnabled即用来控制在编译时是否需要启用Proguard,将minifyEnabled修改为true,即表示启用Proguard。’proguard-android.txt’是Android SDK中自带的一个基本Progu

xiangzhihong8的专栏 1万+

OpenAI,从推出更强大的Sora 2模型展开探索与未来发展前景+部署方法大全+文末邀请码*12

摘要 OpenAI推出的Sora 2是第二代AI视频生成模型,在多模态内容生成领域实现重大突破。文末足足有12个邀请码,速来速享!!!

aqfcca的博客 2250

从0开始的Fragment基本使用以及GridView点击事件无响应处理

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档。

LLCCQAQ的博客 514

D类功放几种常见“爆破音”问题根源与改善措施

在数字D类功放刚上电或功放播放状态切换时,人耳偶尔会听到“嘣”的声音,我们把这个爆破的Pop Noise。数字功放Pop Noise 出现的原因有很多,本文主要分析Pop Noise 出现原因,并提供相应解决方法。

qq_26815321的博客 3594

【C++】 详解 lower_bound 和 upper_bound 函数(看不懂来捶我!!!)

这两个函数是我在 LeetCode 上做题见到,看到不熟悉的函数 lower_bound 和 upper_bound让我感觉很难受,于是在C++ 官网去学习,例子就一个是最基础的,我看明白了。虽然是两个函数的接口就两个,但是有时候看别人使用的时候,里面参数还可以放不同的仿函数,我懵逼了。就去网上搜,但是大家讲解的都是它的第一个接口。我只能再把文档一遍一遍过,代码一遍遍的尝试,调试。最终通过查阅资料将其总结如下。

weixin_45031801的博客 9万+

Android混淆(包括混淆四大组件)

从最开始的两张图片可以看到混淆后的名字都是a,b,c之类的,但是如果想自定义这么处理,这个也很简单需要在proguard-rules.pro文件当中加入#指定外部模糊字典#指定class模糊字典#指定package模糊字典filename.txt文件我放在了demo当中,位置在..app/filename.txt,直接copy下来就可以,下载demo将proguardcreater包拷贝到自己的工程,或者再接在demo。

lwh1212的博客 2118

PyTorch 最新安装教程(2021-07-27)

PyTorch 最新安装教程(2021-07-27)前言1. 安装 Anaconda2. 检查显卡,更新驱动3. 创建PyTorch环境4. 配置清华TUNA镜像源5. 安装 PyTorch6. 测试 前言 万事开头难! 这句话又一次被我验证。 记得前不久刚陷入Tensorflow2.0的安装困境,这一次又被PyTorch 搞哭辽。 孩子太难了o(╥﹏╥)o,不过还好最终成功安装,感谢全网资源,感谢大佬们的博客!被我一次一次试了出来。 1. 安装 Anaconda Anaconda 是一个用于科学计算的 P

全网粉丝30W+,优快云、稀土掘金人工智能领域签约作者,人工智能、大模型、Python 爬虫,商务合作,请私信沟通。 23万+

使用了Ormlite这个jar包,混淆代码就崩溃问题总结

 http://stackoverflow.com/questions/14264199/crash-using-ormlite-on-android-with-proguard

niejing654092427的专栏 2279

9 硬件工程师笔面试高频知识考点真题解析——运算放大器

运算放大器(运放)摘要 运放是一种高增益、差分输入的模拟集成电路,具有虚短(线性区输入电压相等)和虚断(输入电流为零)特性,支持负反馈(线性放大)和开环/正反馈(饱和区比较)两种工作模式。关键特性包括高输入阻抗、低输出阻抗,理想运放参数(如无限增益)与实际参数(如有限带宽)的差异。 选型要点: 信号特性:直流/低频信号关注失调电压(Vos)、温漂;高频信号侧重带宽(GBW)和压摆率(SR)。 电源条件:单/双电源供电、电压范围及功耗需求(如电池设备需低静态电流)。 精度与噪声:微弱信号需低噪声运放,高精度场

XU157303764的博客 1677

华为 MetaERP 通过元数据驱动的多组织架构 + 内部交易协同 + 自动对账引擎 + 合并规则引擎,实现多组织内部往来与合并报表的全流程自动抵消,核心是源头标准化、过程自动化、结果可追溯

摘要: 华为MetaERP通过元数据驱动的多组织架构与主数据标准化,实现内部往来与合并报表全流程自动化。其核心包括:统一组织模型与主数据(确保数据口径一致)、内部交易协同(自动生成对称凭证)、智能对账引擎(多维度自动匹配差异)、合并规则引擎(配置化抵消模板)。依托GaussDB高性能数据库与流批一体架构,华为全球88家子公司合并报表效率提升400%,关账时间缩短至2小时,支持多准则、多币种自动抵消,审计全程可追溯。相比传统ERP,MetaERP在协同性、自动化与扩展性上优势显著,为跨国集团提供高效、准确的合

金牌架构师 265

写给Android开发者的混淆使用手册

转自:http://huihui.name/2016/10/23/%E5%86%99%E7%BB%99Android%E5%BC%80%E5%8F%91%E8%80%85%E7%9A%84%E6%B7%B7%E6%B7%86%E4%BD%BF%E7%94%A8%E6%89%8B%E5%86%8C/ 综述 毫无疑问,混淆是打包过程中最重要的流程之一,在没有特殊原因的情况下,所有

qjbagu的专栏 1498

mjlab & MimicKit 宇树 G1 人形机器人强化学习训练部署

基于mjlab框架训练Unitree G1人形机器人执行双旋踢的示例。参考动作源自Jason Peng的MimicKit项目。数据转换脚本(MimicKit pkl → mjlab csv)完整训练结果与超参数预训练ONNX检查点用于部署实体硬件部署指南⚠️ 免责声明仅用于教育目的。对于因尝试复现此处展示结果而导致的财产损失或人身伤害,我们概不负责。操作硬件时请谨慎行事并保持良好判断力。

2506_90492529的博客 1702

ViewPager2中的Fragment懒加载实现方式

前言 ViewPager2是官方推出的新控件,从名称上也能看出是用于替代ViewPager的,它是基于RecyclerView实现的,因此可以实现一些ViewPager没有的功能,最实用的一点就是支持竖直方向滚动了。 虽然很早就听说过,但是从一些文章中也多少了解到ViewPager2使用的一些坑,也就一直没有正式使用过。前不久ViewPager2发布了1.0.0正式版,心想是时候尝试一下了。哈哈...

快乐丸的博客 2万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

androidx中的Fragment懒加载方案

在进入正文之前要强调一下,本文的分析基于androidx 1.1.0版本,文中提到的setMaxLifecycle()方法是1.1.0-alpha07版本才引入的。 最近把Android Studio更新到了3.5版本,新建项目时发现竟然已经强制使用androidx包了。 于是想着把以前项目中的一些公共类,像BaseActivity、BaseFragment等等都迁移到androidx方便今后的...

快乐丸的博客 1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

对ViewPager+Fragment的懒加载的小小探究

在网上搜索了一些ViewPager+Fragment懒加载的实现方法,基本都是利用setUserVisibleHint()方法中判断当前fragment是否可见,可见则执行加载操作。懒加载frgment父类提供一个加载数据的抽象方法: public abstract class LazyFragment extends Fragment { protected boolean isVis

Jali_li的博客 2453

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Fragment生命周期方法探究及懒加载模式实现

Fragment这个东西相信大家并不会陌生,最近在考虑Fragment的懒加载模式,顺便研究了Fragment的生命周期。首先,先扔出这两张图 1、图示: 图一 图二 2 生命周期方法探究通过上图我们可以清楚的看到Fragment的生命周期方法有:onAttach()、onCreate()、onCreateView()、onActivityCreated()、onStart()、onResu

grrlc1314的博客 659

androidx中的Fragment懒加载

在进入正文之前要强调一下,本文的分析基于androidx 1.1.0版本,文中提到的setMaxLifecycle()方法是1.1.0-alpha07版本才引入的。 最近把Android Studio更新到了3.5版本,新建项目时发现竟然已经强制使用androidx包了。 于是想着把以前项目中的一些公共类,像BaseActivity、BaseFragment等等都迁移到androidx方便今后的开发,要做的也很简单,就是重新导包,将原来的“support系列”替换为“androidx系列”。简单的迁移完成

T-bright的博客 1957

学不动也要学!探究Fragment延迟加载的前世今生

马可没有菠萝 | 作者承香墨影 | 校对https://juejin.im/post/6844904033774206984 | 原文当聊到 Fragment 配合 ViewPager ...

承香墨影的博客 417

activity调用fragment的方法_androidx中的Fragment懒加载

在进入正文之前要强调一下,本文的分析基于androidx 1.1.0版本,文中提到的setMaxLifecycle()方法是1.1.0-alpha07版本才引入的。最近把Android Studio更新到了3.5版本,新建项目时发现竟然已经强制使用androidx包了。于是想着把以前项目中的一些公共类,像BaseActivity、BaseFragment等等都迁移到androidx方便今...

weixin_39536728的博客 1241

判断当前界面是该fragment_学不动也要学!探究Fragment延迟加载的前世今生

码个蛋(codeegg)第852次推文作者:一包纯牛奶链接:https://juejin.im/post/5e085dafe51d45580769a1eb码妞看世界大家普遍对于Fragment懒加载的问题比较关心,其实,对于Fragment懒加载问题的处理由来已久,网上不乏相关的优秀文章。但是,由于Fragment生命周期的原因使得懒加载问题的处理并不是那么的优雅。显然,Googl...

weixin_39705018的博客 267

Android Fragment的setUserVisibleHint方法实现懒加载

一、概述:我们在做应用开发的时候,一个Activity里面可能会以viewpager(或其他容器)与多个Fragment来组合使用,而如果每个fragment都需要去加载数据,或从本地加载,或从网络加载,那么在这个activity刚创建的时候就变成需要初始化大量资源。这样的结果,我们当然不会满意。那么,能不能做到当切换到这个fragment的时候,它才去初始化呢?、答案就在Fragment里的set

lovoo的博客 1015

Android高级----Fragment的懒加载

我们在做应用开发的时候,一个Activity里面可能会以viewpager(或其他容器)与多个Fragment来组合使用,而如果每个fragment都需要去加载数据,或从本地加载,或从网络加载,那么在这个activity刚创建的时候就变成需要初始化大量资源。这样的结果,我们当然不会满意。那么,能不能做到当切换到这个fragment的时候,它才去初始化呢?答案就在Fragment里的setUserVi

Victor_Zhang_SH的博客 458

Fragment的setUserVisibleHint方法实现懒加载

我们在做应用开发的时候,一个Activity里面可能会以viewpager(或其他容器)与多个Fragment来组合使用,而如果每个fragment都需要去加载数据,或从本地加载,或从网络加载,那么在这个activity刚创建的时候就变成需要初始化大量资源。这样的结果,我们当然不会满意。那么,能不能做到当切换到这个fragment的时候,它才去初始化呢? 该方法用于告诉系统,这个Fragment

qq_17151301的博客 421

学不动也要学!探究Fragmen延迟加载的前世今生

上周在[《学不动也要学!深入了解ViewPager2》](https://juejin.im/post/5df4aabe6fb9a0161104c8eb)一篇文章的留言中,大家普遍对于Fragment懒加载的问题比较关心。其实,对于Fragment懒加载问题的处理由来已久,网上不乏相关的优秀文章。但是,由于Fragment生命周期的原因使得懒加载问题的处理并不是那么的优雅。显然,Google也意识到了问题所在。因此,在Androidx的库中对于Fragment的生命周期进行了深度优化,使得我们更容易的去..

smily的博客 829
上一篇: 四大组件—Serivce
下一篇: View绘制流程一:布局是如何添加到界面上的
<天各一方>
博客等级 码龄6年 17粉丝 17原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值