fragment中的onWindowFocusChanged

本文详细解析了Android中onWindowFocusChanged方法的作用,即在活动获得或失去焦点时调用,是判断活动是否对用户可见的重要指标。文章提供了在Fragment中使用此方法的两种方式,包括通过ViewTreeObserver和实现自定义接口。

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

关于onWindowFocusChanged官方解释:当前窗体得到或失去焦点的时候的时候调用。这是这个活动是否是用户可见的最好的指标。默认的实现清除重点跟踪状态,所以应该总是被调用。请注意,这提供了有关整体焦点状态信息,这是独立管理活动的生命周期。因此,焦点的变化通常会有一些关系生命周期变化(一种活动停止一般不会得到窗口焦点),你应该不依赖于任何特定的顺序之间的回调在这里和那些在其他生命周期方法如onresume()。

   @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
         //TODO anything
    }

onWindowFocusChanged该方法存在于activityapi中,若在activity中可以直接调用,但是在fragment中就不行。下面给两种对应方法:

方法一:

//这里的view为fragment,minSdkVersion必须大于等于18
  view.getViewTreeObserver().addOnWindowFocusChangeListener(new ViewTreeObserver.OnWindowFocusChangeListener() {
            @Override
            public void onWindowFocusChanged(final boolean hasFocus) {
                // do your stuff here
                
            }
        });

方法二;
首先定义一个接口

public interface fOnFocusListenable {
   public void onWindowFocusChanged(boolean hasFocus);
}

然后在需要安排的fragment实现上面的接口

public class MyFragment implements fOnFocusListenable {
    ....
    public void onWindowFocusChanged(boolean hasFocus) {
        ...
    }
}

最后在fragment依附的activity上加监听,调用fragment中的onWindowFocusChanged方法

public class MyActivity extends AppCompatActivity {
   @Override
   public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);

        if(currentFragment instanceof fOnFocusListenable) {
            ((fOnFocusListenable) currentFragment).onWindowFocusChanged(hasFocus);
        }
    }
}

另外的另外,也可以考虑

 @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
    }

意思是说,fragment显示在屏幕中时调用该方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值