如何在Fragment上获取onWindowFocusChanged?

时间:2015-05-08 17:56:21

标签: android fragment

我正在使用Android Sliding Menu using Navigation Drawer。 我知道onWindowFocusChanged可以使用MainActivity。 我该怎么检查它是否有片段聚焦?<​​/ p> 有人说我可以将hasFocus传递给片段,但我不知道该怎么做。谁能给我一些示例代码?

我想在我的片段上运行↓这个

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);

    if (hasFocus) {
        //I need to do someing.
        method();
    }
}

2 个答案:

答案 0 :(得分:20)

您可以创建一个接口,所有片段都可以实现此接口,并在onWindowFocusChanged内获取当前片段并通过调用接口提供的方法。

片段的示例界面可以是:

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

您的片段必须实现此接口:

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

然后在您的活动的onWindowFocusChanged中,您可以执行此操作 以下内容:

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

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

或者您创建一个侦听器,并将活动片段添加到侦听器。因此,如果片段可见,则您订阅此侦听器,并且每次调用onWindowFocusChanged事件时,都会调用此侦听器。

这种方法与上述方法非常相似,区别在于有IOnFocusListenable的列表,并且在活动onWindowFocusChanged方法

中触发了这些方法

答案 1 :(得分:20)

API 18 ,您可以直接在片段中使用此代码

科特林

view.viewTreeObserver.addOnWindowFocusChangeListener { hasFocus -> /*do your stuff here*/ }

爪哇

view.getViewTreeObserver().addOnWindowFocusChangeListener(hasFocus -> { /*do your stuff here*/ });

或没有lambda:

view.getViewTreeObserver().addOnWindowFocusChangeListener(new ViewTreeObserver.OnWindowFocusChangeListener() {
    @Override
    public void onWindowFocusChanged(final boolean hasFocus) {
        // do your stuff here
    }
});

您可以在 onViewCreated 中获取查看对象,还是只需调用查看?来自世界各地的/ getView()