fragment中的onWindowFocusChanged

关于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显示在屏幕中时调用该方法。

猜你喜欢

转载自blog.csdn.net/julystroy/article/details/86749662