public class MyFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
@Override
public void onResume() {
super.onResume();
if (?) {
... handle ...
}
}
@Override
public void onPause() {
super.onPause();
if (?) {
... handle ...
}
}
}
我正在尝试使用一个实例保留片段来处理onResume()
和onPause()
期间的某些事情。我已经将它添加到主要活动中,到目前为止,除了一件事之外,它工作得很好。如果我在应用程序中输入另一个Activity,让我们说应用程序设置,这个片段仍会在屏幕翻转时执行onResume和onPause。
我需要的是一种方法来确定此片段所附加的活动是否不在前台。我尝试过像isTaskRoot这样的东西,但只要执行这些生命周期方法,它就会返回true。现在如果Android知道在运行onResume之后将这个片段暂停,那么必须有一种方法可以在onResume方法中检查这个吗?
答案 0 :(得分:2)
调用onPause()
时,活动变为非前景。
活动在调用onResume()
时成为前景。
http://developer.android.com/guide/components/activities.html#Lifecycle
查找
的一种方法该片段附加到的活动是否不在 前景
是让活动在活动的isForeground = false
方法中设置onPause()
,并在活动的isForeground = true
方法中设置onResume()
,并通过此片段将此标记设为可用一个类似于described here的回调接口。唯一的区别是将片段事件推送到Activity,片段将读取活动状态(例如,SomeInterface.getForeground()
)。
另一种方法是定义公共方法MyFragment.setForeground(boolean foreground)
,并使活动从其onPause()
和onResume()
方法调用此方法。
答案 1 :(得分:2)
只需使用活动功能hasWindowFocus()
即可。这对我有用。并且您可以使用它设置一个标志来完成一个动作,以便在Activity返回焦点并检查onResume()
中的标志时。