4

私のナビゲーションでは、次の一連のアクティビティを生成できます: A、B、C、B、C、B、C、...、D。D
アクティビティには、ユーザーを A に送る [戻る] ボタンのオーバーライドされたメソッドが含まれています。Intent.FLAG_ACTIVITY_CLEAR_TOPパラメータ付きのアクティビティ。

アクティビティ A は必要な追加パラメーターをいくつか受け取りますが、私の問題は、この CLEAR_TOP フラグを使用して D アクティビティで startActivity をトリガーすると、アクティビティ A が以前の余分なパラメーターを取得したり、onResume メソッドを起動したりしないように見えることです。

CLEAR_TOP はrecreates、古いアクティビティを起動するのではなく、実際にターゲット アクティビティであることを意味しますか? restore those extra intentまた、アクティビティ D から起動するときに、アクティビティ A のパラメータに対するシステムに自然なアプローチはありますか。

PS 現在、私が目にする唯一の選択肢は、D アクティビティでインテント オブジェクトを構築するときに、以前の必要なパラメーターを手動で入力することです。それは行く方法ですか?

ありがとう。

4

3 に答える 3

4

ドキュメントが言うように簡単です。

FLAG_ACTIVITY_CLEAR_TOPFLAG_ACTIVITY_SINGLE_TOPの両方を設定すると、新しいパラメータがonNewIntent()にプッシュされます。

于 2012-07-15T08:59:40.423 に答える
4

これに対する解決策が見つかったかどうかはわかりませんが、ターゲット アクティビティの onNewIntent(Intent theNewIntent) メソッドをオーバーライドし、setIntent(theNewIntent) を呼び出すことで解決しました。

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);

    /*
     * This overrides the original intent.
     */      
    setIntent(intent);
}
于 2013-08-19T06:07:17.297 に答える
2

CLEAR_TOPは、古いアクティビティを表示するのではなく、実際にターゲットアクティビティを再作成することを意味しますか?

CLEAR_TOPフラグ、ターゲットアクティビティを使用does not recreateする場合、ただし新しいインテントを使用してアクティビティAを表示する場合、この新しいインテントのエクストラはアクティビティAでのみ取得できます。

また、アクティビティDから起動したときに、アクティビティAの余分なインテントパラメータを復元するためのシステム自然なアプローチはありますか?

アクティビティAを離れるときに、これらのエクストラをファイル、設定、またはグローバルアプリケーション変数に保存できます。または、アクティビティAでこれらのエクストラを保存する静的メソッドを宣言し、強制的に表示される前にアクティビティDから呼び出すことができます。アクティビティA:
アクティビティA:

Public class A extends Activity{
...
public static void saveExtras(){
//save extras in file,preferences,...
}
...
}     

アクティビティD:

Public class D extends Activity{
...
public void forceActivityA(){
A.saveExtras();
Intent i = new Intent(this,A.class());
...
startActivity(i);
}
...
} 

編集
アクティビティAが再び表示されると、そのonCreate()メソッドが再び呼び出され、ここでそれを要求するインテントを取得できます。次に、インテントのフラグを取得して67108864(CLEAR_TOPフラグの定数)と比較できます。この定数と等しい場合は、ストレージからのデータ(file、preferences、...)。グローバル変数を作成するには、この質問を参照してください。

于 2012-07-15T08:55:40.220 に答える