【Android】Fragment真正意义上的onResume和onPause

本文介绍了在使用ViewPager时如何有效管理Fragment的可见状态。通过覆盖setUserVisibleHint方法,可以实现类似于onResume和onPause的效果,确保Fragment在切换时能够正确响应其可见性变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

Fragment虽然有onResume和onPause的,但是这两个方法是Activity的方法,调用时机也是与Activity相同,和ViewPager搭配使用这个方法就很鸡肋了,根本不是你想要的效果,这里介绍一种方法。


声明

欢迎转载,但请保留文章原始出处:) 
博客园:http://www.cnblogs.com
农民伯伯: http://over140.cnblogs.com 

正文

 继承setUserVisibleHint方法:

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        
        Log.i(ClassMethodFieldName.getCurrentMethodName(), isVisibleToUser?"true":"false");
        if (isVisibleToUser) {
            //相当于Fragment的onResume
        } else {
            //相当于Fragment的onPause
        }
    }

  代码说明:

通过阅读ViewPager和PageAdapter相关的代码,切换Fragment实际上就是通过设置setUserVisibleHint和setMenuVisibility来实现的,调用这个方法时并不会释放掉Fragment(即不会执行onDestoryView)。

Android Developer -- Fragment
Resumed The fragment is visible in the running activity.
Paused Another activity is in the foreground and has focus, but the activity in which this fragment lives is still visible (the foreground activity is partially transparent or doesn't cover the entire screen).

总结:

1 在一个Activity中,FragmentA 和FragmentB切换时,不会触发Fragment的onResume()和onPause()(因为这两个方法是Activity的方法,调用时机也是与Activity相同);

2在一个Activity中,如果只有FragmentA,在启动Activity并replace()或add()FragmentA后,并不会调用setUserVisibleHint()方法,在其中做是否可见的判断是无效的。需要使用onResume()和onPause()方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值