Fragment可见性监听方案,多种case完美兼容,2021年安卓开发者跳槽指南

一个页面只有一个 fragment 的,使用 replace。Hide 和 Show 操作。ViewPager 嵌套 Fragment。宿主 Fragment 再嵌套 Fragment,比如 ViewPager 嵌套ViewPager,再嵌套 Fragment。Replace 操作==============================..
摘要由CSDN通过智能技术生成
  1. 一个页面只有一个 fragment 的,使用 replace。

  2. Hide 和 Show 操作。

  3. ViewPager 嵌套 Fragment。

  4. 宿主 Fragment 再嵌套 Fragment,比如 ViewPager 嵌套ViewPager,再嵌套 Fragment。

Replace 操作

======================================================================

replace 操作这种比较简单,因为他会正常调用 onResume 和onPause 方法,我们只需要在 onResume 和 onPause 做check 操作即可。

override fun onResume() {

info(“onResume”)

super.onResume()

onActivityVisibilityChanged(true)

}

override fun onPause() {

info(“onPause”)

super.onPause()

onActivityVisibilityChanged(false)

}

Hide 和 Show 操作

==========================================================================

Hide 和 show 操作,会促发生命周期的回调,但是 hide 和show 操作并不会,那么我们可以通过什么方法来监听呢?其实很简单,可以通过 onHiddenChanged 方法。

/**

* 调用 fragment show hide 的时候回调用这个方法

*/

override fun onHiddenChanged(hidden: Boolean) {

super.onHiddenChanged(hidden)

checkVisibility(hidden)

}

ViewPager 嵌套 Fragment

=================================================================================

ViewPager 嵌套 Fragment,这种也是很常见的一种结构。因为ViewPager 的预加载机制,在 onResume监听是不准确的。

这时候,我们可以通过 setUserVisibleHint 方法来监听,当方法传入值为true的时候,说明Fragment可见,为false的时候说明Fragment被切走了。

public void setUserVisibleHint(boolean isVisibleToUser)

有一点需要注意的是,这个方法可能先于Fragment的生命周期被调用(在FragmentPagerAdapter中,在Fragment被add之前这个方法就被调用了),所以在这个方法中进行操作之前,可能需要先判断一下生命周期是否执行了。

/**

  • Tab切换时会回调此方法。对于没有Tab的页面,[Fragment.getUserVisibleHint]默认为true。

*/

@Suppress(“DEPRECATION”)

override fun setUserVisibleHint(isVisibleToUser: Boolean) {

info(“setUserVisibleHint = $isVisibleT

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值