Fragment(四)常见问题

Fragment(四)常见问题

博客对应的Demo地址:GitHubGitee

通过这篇博客,我们能知道以下问题:

  • Fragment 在不同情况下实现网络延迟
  • Fragment 为什么一定要有无参构造?
  • FragmentActivity 传递数据方式
  • 嵌套 Fragment 时父 Fragment 生命周期传递到子 Fragment 中的方式

1. Fragment 在不同情况下实现网络延迟

其实使用延迟加载主要目的是在页面对用户可见时在加载网络,避免资源浪费,那么这个问题就转换成了 Fragment 在不同情况下怎样判断对用户的可见性,这个问题在前面的几篇博客中都或多或少的提到了,这里直接做一个总结:

  1. add()+show()/hide():生命周期方法不对,多个添加的 Fragment 一开始就会会同时执行到 onResume(),退出时又会同时执行其他生命周期方法(onPause()onDetach()),所以不能直接通过生命周期方法处理,而是需要通过 onHiddenChanged(boolean hidden) 方法判断。

  2. replace():“替换”,这种方式会销毁布局容器内的已有 Fragment,然后重新创建一个新的 Fragment,销毁的Fragment执行onPause()onDetach()回调方法,新的 Fragment 会执行 onAttach()onResume() 回调,所以直接在 onStart()onResume() 回调中处理就行了。

  3. ViewPager:在AndroidX之前只有一种情况,在AndroidX中有两种情况,在Adapter构造中增加了一个 behavior 参数(取值:BEHAVIOR_SET_USER_VISIBLE_HINTBEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT),非AndroidX就相当于取值 BEHAVIOR_SET_USER_VISIBLE_HINT,所以两种情况需要分别来看:

    • BEHAVIOR_SET_USER_VISIBLE_HINT:生命周期方法监听不准确,需要通过 setUserVisibleHint() 方法来监听,当方法传入值为true的时候,说明Fragment可见,为false的时候说明Fragment被切走了。但是需要注意的是,这个方法不属于生命周期方法,所以它可能在生命周期方法执行之前就执行了,也就是说,有可能执行这个方法的时候,Fragment 还没有被添加到容器中,所以需要进行判断一下。

    • BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT:生命周期方法是正常的,只有正在显示的 Fragment 执行到 onResume() 方法,其他 Fragment 只会执行到 onStart() 方法,并且当 Fragment 切换到显示时执行 onResume() 方法,切换到不显示状态时触发 onPause() 方法。

  4. ViewPager2:生命周期方法也是正常的,只有正在显示的 Fragment 执行到 onResume() 方法,其他 Fragment 只会执行到 onStart() 方法,并且当 Fragment 切换到显示时执行

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值