Ich versuche, das Ergebnis zu setzen, nachdem die Taste ZURÜCK gedrückt wurde. Ich rufe onDestroy an
Intent data = new Intent();
setResult(RESULT_OK, data)
Aber wenn es darum geht
onActivityResult(int requestCode, int resultCode, Intent data)
Der resultCode ist 0 (RESULT_CANCELED) und die Daten sind 'null'.
Wie kann ich das Ergebnis einer Aktivität übergeben, die mit der Schaltfläche ZURÜCK beendet wurde?
Activity
Ergebnis muss vorher eingestellt werdenfinish()
es aufgerufen wird. Wenn Sie auf ZURÜCK klicken, wirdfinish()
Ihr Telefon tatsächlich aufgerufenactivity
, sodass Sie das folgende Snippet verwenden können:Wenn Sie rufen
NavUtils.navigateUpFromSameTask();
inonOptionsItemSelected()
,finish()
heißt, es wird aber der falschresult code
. So müssen Sie rufenfinish()
nichtnavigateUpFromSameTask
inonOptionsItemSelected()
. falscher requestCode in onActivityResultquelle
finish
mitonPause
und zu tun hatonDestroy
. Diese sind absolut nicht im Zusammenhang mit Ausnahme , dassfinish
startet die Beendigung Prozess,onPause
und einonDestroy
Teil von sind.Wenn Sie einige benutzerdefinierte festlegen möchten
RESULT_CODE
inonBackPressed
Fall , dann müssen Sie zuerst dieresult
und rufen Sie dann diesuper.onBackPressed()
und Sie erhalten die gleiche erhaltenRESULT_CODE
in der Anrufer Aktivität desonActivityResult
Verfahrensquelle
Ich habe meinen Code überarbeitet. Anfangs habe ich einige Daten vorbereitet und wie
activity result
in eingestelltonDestroy
(dies hat nicht funktioniert). Jetzt setze ichactivity
jedes Mal Daten, wenn die zurückzugebenden Daten aktualisiert werden, und habe nichts drinonDestroy
.quelle
setResult()
, gehen Ihre Daten verloren.Sie sollten onOptionsItemSelected folgendermaßen überschreiben :
quelle
Verweisen onActivityResult (int, int, Intent) doc
Die Lösung besteht darin, den resultCode auf den Wert Activity.RESULT_CENCELED zu überprüfen . Wenn ja, bedeutet dies, dass entweder ZURÜCK gedrückt wurde oder die Aktivität abgestürzt ist. Hoffe es funktioniert für euch, funktioniert für mich :).
quelle
onDestroy
ist zu spät in der Kette - überschreiben Sie stattdessenonPause
und überprüfen SieisFinishing()
, ob Ihre Aktivität am Ende ihres Lebenszyklus ist.quelle
Versuchen Sie, onBackPressed (ab Android Level 5) zu überschreiben, oder überschreiben Sie onKeyDown () und fangen Sie KeyEvent.BUTTON_BACK ab (siehe Android-Aktivitätsergebnisse ). Dies ist der Trick für mich.
quelle
Verlassen Sie sich nicht auf eine Logik, die in onPause einer Aktivität ausgeführt wird, wenn Sie zur ersten zurückkehren. Laut den Dokumenten:
Sehen http://goo.gl/8S2Y Informationen finden .
Am sichersten ist es, das Ergebnis festzulegen, nachdem jeder Vorgang zur Änderung des Ergebnisses abgeschlossen ist (wie Sie in Ihrer Antwort erwähnt haben).
quelle
Ich füge die Antwort ein, die für andere hilfreich sein kann: Wenn ein Set launcheMode mit Android: launchMode = "singleTask" festgelegt wird, kann ich auch das Ergebnis nicht erhalten, sagt der Doc:
und:
quelle