12

A 、 B 、 C というアクティビティがいくつかあります。アクティビティ A は B を開始し、B は C を開始します。私のアプリでは、ユーザーがアクティビティ A に戻ることができるナビゲーション ドロワーを配置しました。ユーザーがアクティビティに戻ると、AI は実際にはアクティビティを再開せずに再開するフラグをいくつか渡しました。

intent = new Intent(activity, A.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
        | Intent.FLAG_ACTIVITY_SINGLE_TOP);

今、バンドルを使用していくつかのデータを渡そうとしています。

    bundle.putInt("selectedTab", FEATURED_COUPONS);
    intent.putExtras(bundle);

しかし、私のアクティビティ A では、バンドルは常に null です。

if(bundle != null)
{
    if(bundle.containsKey("selectedTab"))
    {
        int tab = bundle.getInt("selectedTab");
    }
}
4

3 に答える 3

24

あなたは間違った方法で物事を進めています。

Integerエキストラにエキストラを入れたいだけIntentなら、これをしないでください...

bundle.putInt("selectedTab", FEATURED_COUPONS);
intent.putExtras(bundle);

ドキュメントからputExtras(Bundle extras)...

インテントに一連の拡張データを追加します。キーにはパッケージ プレフィックスを含める必要があります。たとえば、アプリ com.android.contacts は「com.android.contacts.ShowAll」のような名前を使用します。

代わりに使用するだけ...

intent.putExtra("selectedTab", FEATURED_COUPONS);

ただし、これは問題の本当の原因ではありません。Sumit Uppal が言及しているように、 A にonNewIntent(Intent intent)を実装する必要がありますActivity。その後、それを使用して「現在」Intentを新しいものに設定できIntentます...

@Override
protected void onNewIntent(Intent intent) {
    if (intent != null)
        setIntent(intent);
}

次に、onResume()使用できます...

Intent intent = getIntent();

...そして、そこBundleから を取得しIntentます。

于 2014-06-23T08:28:38.313 に答える
2

onNewIntent(Intent) メソッドで " if(bundle != null)" タスクを実行する必要があると思います

于 2014-06-23T07:45:21.550 に答える