4
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 方法中检查这一点吗?

4

2 回答 2

3

只需使用 Activity 的功能hasWindowFocus()。这对我有用。并且您可以使用它来设置一个标志,以在 Activity 确实返回焦点并检查标志时完成一个动作onResume()

于 2017-10-30T21:00:38.717 回答
2

onPause()活动在被调用时变为非前台。onResume()Activity 在被调用时成为前台。

http://developer.android.com/guide/components/activities.html#Lifecycle

找出答案的一种方法

此片段附加到的活动是否不在前台

就是让活动isForeground = false在活动的onPause()方法中设置,并在活动的方法中设置isForeground = trueonResume()并通过类似于此处描述的回调接口使该标志可用于片段。唯一的区别是将片段事件推送到 Activity,片段将读取 Activity 状态(例如,SomeInterface.getForeground())。

另一种方法是定义一个公共方法MyFragment.setForeground(boolean foreground)并让活动从它的onPause()和方法中调用这个onResume()方法。

于 2013-07-09T06:16:57.180 回答