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()。これをメインのアクティビティに追加しましたが、これまでのところ、1 つのことを除いてうまく機能しています。アプリケーションに別のアクティビティを入力すると、アプリケーションの設定としましょう。このフラグメントは、画面の反転時に onResume と onPause を実行します。

必要なのは、このフラグメントが接続されているアクティビティがフォアグラウンドにないかどうかを調べる方法です。isTaskRoot などを試してみましたが、これらのライフサイクル メソッドが実行されている限り true が返されます。Android が onResume の実行後にこのフラグメントを一時停止することを認識している場合、onResume メソッド内からこれを確認する方法が必要ですか?

4

2 に答える 2

2

呼び出されると、アクティビティは非フォアグラウンドになりonPause()ます。呼び出されると、アクティビティはフォアグラウンドになりonResume()ます。

http://developer.android.com/guide/components/activities.html#ライフサイクル

調べる一つの方法

このフラグメントが接続されているアクティビティがフォアグラウンドにないかどうか

アクティビティのメソッドにアクティビティを設定isForeground = falseし、アクティビティのonPause()メソッドに設定isForeground = trueして、ここで説明onResume()したものと同様のコールバック インターフェイスを介してフラグメントでこのフラグを使用できるようにすることです。唯一の違いは、代わりにフラグメント イベントをアクティビティにプッシュすることです。フラグメントはアクティビティの状態を読み取ります (例: )。SomeInterface.getForeground()

もう 1 つの方法は、パブリック メソッドを定義しMyFragment.setForeground(boolean foreground)、アクティビティがそのメソッドonPause()とメソッドからこのメソッドを呼び出すようにすることonResume()です。

于 2013-07-09T06:16:57.180 に答える