我正在使用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();
}
}
答案 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()。