2014-06-23 10 views
9

Ich habe einige Aktivitäten sagen A, B, C. Aktivität A startet B, B startet C und so weiter. In meiner App habe ich eine Navigationsschublade platziert, mit der Benutzer zu Aktivität A zurückkehren können. Wenn der Benutzer zu Aktivität A zurückkehrt, habe ich einige Flags übergeben, die die Aktivität nicht neu starten, sondern sie einfach fortsetzen.Alte Aktivität fortsetzen, indem neue Daten im Bündel übergeben werden

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

Jetzt versuche ich einige Daten mit Bundles zu übergeben.

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

Aber in meiner Aktivität A ist das Bündel immer Null.

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

den Code, wo Sie das Bundle erhalten und starten Sie die Aktivität A –

Antwort

16

Sie über die Dinge in die falsche Richtung gehen.

Wenn alles, was Sie tun wollen eine Integer zusätzliche in die Intent Extras setzen wird dann dies nicht tun ...

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

Aus der Dokumentation für putExtras(Bundle extras) ...

hinzufügen eine Reihe von erweiterten Daten für die Absicht. Die Schlüssel müssen ein Paket-Präfix enthalten, zum Beispiel würde die App com.android.contacts Namen wie "com.android.contacts.ShowAll" verwenden.

Statt nur nutzen ...

intent.putExtra("selectedTab", FEATURED_COUPONS); 

Dies ist nicht die eigentliche Ursache des Problems jedoch. Wie Sumit Uppal erwähnt, sollten Sie onNewIntent(Intent intent) in Activity A. implementieren Sie dann, dass die ‚aktuellen‘ festlegen können Intent die neue Intent zu sein ...

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

Dann in onResume() können Sie verwenden ...

Intent intent = getIntent(); 

... und dann die Bundle von dieser Intent.

+0

Ein bisschen spät, aber ich stolperte gerade diese Lösung, endlich endete meine Qual nach 3 Stunden Suche !!! – trueicecold

+1

DANKE !!!! total vergessen onNewIntent – reidisaki

+0

Das ist genau das, was ich gesucht habe. Vielen Dank! – txedo

0

Wenn Sie Daten auf eine Aktivität passieren bereits erstellt Sie startActivityForResult verwenden müssen, und überschreiben onActivityResult Methode in Aktivität A.

Stattdessen, wenn Sie die Aktivität wieder erstellen Ich empfehle Finish() zu verwenden, in der Aktivität, nach der Methode startActivity.

2

Ich denke, Sie sollten tun "if (bündeln! = Null)" Aufgabe in onNewIntent (Intent) Methode

+0

ist onNewIntent (Absicht) -Methode auf der empfangenden App oder der sendenden App? – LizG