Ich habe 3 Klassen in meinem Beispiel: Klasse A, die Hauptaktivität. Klasse A ruft ein startActivityForResult auf:
Intent intent = new Intent(this, ClassB.class);
startActivityForResult(intent, "STRING");
Klasse B, diese Klasse ist eine TabActivity:
Intent intent = new Intent(this, ClassC.class);
tabHost.addTab...
Klasse C, diese Klasse ist eine reguläre Aktivität:
Intent intent = this.getIntent();
intent.putExtra("SOMETHING", "EXTRAS");
this.setResult(RESULT_OK, intent);
finish();
onActivityResult wird in Klasse A aufgerufen, aber der resultCode ist RESULT_CANCELED
anstelle von RESULT_OK
und die zurückgegebene Absicht ist null. Wie kann ich etwas aus der Aktivität in einem TabHost zurückgeben?
Mir ist klar, dass das Problem darin besteht, dass meine Klasse C tatsächlich innerhalb der Klasse B läuft, und Klasse B ist das, was den RESULT_CANCELED
Rücken zur Klasse A zurückbringt. Ich kenne nur noch keine Lösung.
quelle
http://tylenoly.wordpress.com/2010/10/27/how-to-finish-activity-with-results/
Mit einer geringfügigen Änderung für "param_result"
quelle
setResult
war die Hauptsache. Setzen Sie es auf etwas oder einen Wert zum BeispielRESULT_OK
und Sie können loslegen.setResult(RESULT_OK);
. Hat mir geholfen, +1Intent.FLAG_ACTIVITY_FORWARD_RESULT?
quelle
Sie können ein onActivityResult auch in Klasse B implementieren und Klasse C mit startActivityForResult starten. Sobald Sie das Ergebnis in Klasse B erhalten haben, setzen Sie das Ergebnis dort (für Klasse A) basierend auf dem Ergebnis aus Klasse C. Ich habe es nicht ausprobiert, aber ich denke, das sollte funktionieren.
Eine andere Sache, auf die Sie achten sollten, ist, dass Aktivität A keine Einzelinstanzaktivität sein sollte. Damit startActivityForResult funktioniert, muss Ihre Klasse B eine Unteraktivität zu Aktivität A sein. Dies ist in einer einzelnen Instanzaktivität nicht möglich. Die neue Aktivität (Klasse B) wird in einer neuen Aufgabe gestartet.
quelle
Um Aktivität 2 von Aktivität 1 aus zu starten und das Ergebnis zu erhalten, können Sie startActivityForResult verwenden und onActivityResult in Aktivität 1 implementieren und setResult in Aktivität 2 verwenden.
quelle