6

LocalActivityManagerタブから別のタブに切り替えると、選択したタブに対応するを開始しますActivity。私の問題は簡単です:

タブ 1 をクリックすると、作成intent11し、初めてメソッドonCreate(Bundle emptyBundle)Activity1呼び出されます。タブ 2 をクリックすると、作成intent2され、メソッドonCreate()が呼び出されます。次に、tab1 をクリックして を作成するintent12と、メソッドonCreate(Bundle emptyBundle)は呼び出されませんが、onResume()呼び出されます (通常の動作)。

と に特別なエクストラを入れintent11intent12を作成するActivity1ので、 を使用してアクセスしgetIntent().getExtras()ます。

私の問題は次のとおりです。2 回目に tab1 に移動すると、intent12を使用して が開始されますActivityが、 の結果getIntent()はまだintent11です。そのため、 に設定されているエクストラは取得できません。intent12に設定されているエクストラのみを取得できintent11ます。

私は何を間違っていますか?インテントに extras() を入れないようにする必要がありますか? ありがとうございました。

ありがとうございました。

PS : 今のところ、onCreate() の呼び出しを強制する意図で特別なフラグを設定しましたが、それは良い方法ではないと確信しています。

4

3 に答える 3

6

私はあなたが探しているものがここにあると信じています: https ://developer.android.com/reference/android/app/Activity.html#onNewIntent%28android.content.Intent%29

onNewIntent(Intent newIntent)を使用すると、最新のインテントでアプリを作成/再開するために使用された以前のインテントをオーバーライドできます。

于 2012-07-23T17:41:30.970 に答える
1

Xamarin.Android/Monotouch では、次のメソッドをアクティビティに追加したところ、スムーズに動作しました。

    protected override void OnNewIntent(Intent intent)
    {
        base.OnNewIntent(intent);
        Intent = intent;
    }

この原則は、ネイティブ Android でも正常に機能するはずです。

于 2016-09-13T08:09:16.887 に答える
1

いいえ、まだエクストラを配置できるはずですが、新しいインテントを作成しているときにエクストラが「上書き」されているかどうか疑問に思っているので、これを試すことをお勧めします:

エクストラを作成する最初のインテントのバンドルに入れ、次のインテントを作成する前に、次のようにして、バンドルにすでにバンドルに含まれている可能性のあるものにバンドルを設定します

Bundle bundle = getResultExtras(false);

次に、新しいインテントを作成し、バンドルからデータを取得する準備ができたら実行できます

Bundle bundle = getResultExtras(false);

もう一度、バンドルから通常どおりにデータを取得します。Intent1 に入れたエクストラが Intent2 に入れたエクストラと同じキー名を持っていないことを確認してください。

それがいくつかの助けになることを願っています。

より具体的なヘルプが必要な場合は、コードを投稿すると役立つ場合があります。

于 2011-07-26T17:32:26.530 に答える