Ich habe vier Aktivitäten, sagen wir A, B, C und D. Meine Situation ist, dass A die Aktivität B durch startActivityForResult starten wird.
startActivityForResult(new Intent(this,B.class),ONE);
In anderen Situationen werde ich B mit anderen Situationen. wie
startActivityForResult(new Intent(this,B.class),TWO);
In B muss ich je nach RequestCode C oder D anrufen. Dh wenn ONE C starten muss, sonst D.
Ich muss also wissen, wie ich den RequestCode in der untergeordneten Aktivität (B hier) überprüfen kann.
Mit anderen Worten, ich möchte den Anforderungscode erhalten, mit dem Aktivität B gestartet wurde.
Sie können den Anfragecode per Put extra übergeben.
intent.putExtra("requestCode", requestCode);
Oder wenn Sie verwendet haben startActivityForResult
viele Male, dann besser als jede Bearbeitung, können Sie override
das startActivityForResult
in deiner Activity
fügen Sie Ihren Code dort so hinzu
@Override
public void startActivityForResult(Intent intent, int requestCode) {
intent.putExtra("requestCode", requestCode);
super.startActivityForResult(intent, requestCode);
}
Es ist also nicht erforderlich, alle Ihre startActivityForResult zu bearbeiten
Hoffe es hat dir geholfen
Der Anforderungscode wird nicht automatisch an die gestartete Aktivität übergeben, da sie diesen Wert nicht kennen muss (und sollte). Es muss nur wissen, was zu tun ist, und nicht, wo es gestartet wurde.
Das Starten einer Aktivität ist eigentlich nur eine andere Form des Methodenaufrufs. Wenn Sie eine Methode aufrufen, erhalten Sie das Ergebnis synchron (genau dort, wo Sie den Aufruf getätigt haben). In diesem Fall übergeben Sie nur die Informationen, die die Methode benötigt, um ihre Arbeit zu erledigen. Sie sagen ihm nicht, von wo aus Sie ihn angerufen haben.
Das Starten einer Aktivität ist das asynchrone Analogon zum Aufrufen einer Methode, in diesem Fall erhalten Sie das Ergebnis in der speziellen Methode onActivityResult(). Bei dieser Methode müssen Sie wissen, was Sie mit dem gerade erhaltenen Ergebnis tun sollen, und Sie haben den Anforderungscode dafür.
Um etwas klarer zu machen, warum es keine gute Idee ist, den Anforderungscode als Parameter zu übergeben, betrachten Sie die Beispielaktivität, die ein Produkt zeigt, das Sie kaufen können. Bei dieser Aktivität gibt es zwei Schaltflächen mit der Aufschrift „Kaufen“ und „Anmelden“ (da Sie derzeit nicht angemeldet sind). Durch Drücken von „Anmelden“ wird eine Aktivität namens „Anmelden“ gestartet, die versucht, den Benutzer mit den bereitgestellten Informationen anzumelden. Wenn Sie auf „Kaufen“ klicken, wird zunächst dieselbe Aktivität „Anmelden“ gestartet, und wenn die Anmeldung erfolgreich war, wird die Kaufaktivität gestartet.
Jetzt verwendet die Schaltfläche „Anmelden“ den Anforderungscode 1, um die Anmeldeaktivität zu starten, aber die Schaltfläche „Kaufen“ kann nicht denselben Anforderungscode verwenden, da sie etwas anderes tun muss, wenn die Anmeldung erfolgreich ist. Die Schaltfläche “Kaufen” verwendet also den Anforderungscode 2.
In der Aktivität “Anmelden” erhalten Sie möglicherweise zwei verschiedene Anforderungscodes, je nachdem, von wo aus der Anruf erfolgt ist, aber Sie müssen genau das gleiche Verfahren durchführen.
Wenn Sie also den Anforderungscode als Parameter übergeben, erhalten Sie am Ende einen Code, der dasselbe für ein paar verschiedene Anforderungscodes tun muss, wie zum Beispiel:
if (requestCode == LOGIN || requestCode == BUY) {
// ...
} else ...
Am Ende werden Sie auch die Anforderungscode-Konstanten an einem zentralen Ort speichern, z. B. in einer Klasse namens RequestCodes.
Kurz gesagt, der Anforderungscode sollte nur verwendet werden, um zu entscheiden, was mit dem empfangenen Ergebnis geschehen soll. Auf diese Weise erhalten Sie am Ende einen modulareren, einfacher zu wartenden und einfacher zu erweiternden Code.
Am Ende habe ich eine benutzerdefinierte Intent-Aktion verwendet, um diese Art von Informationen an die Startaktivität zu übergeben.
protected static final String ACTION_DO_C = "do_c";
protected static final String ACTION_DO_D = "do_d";
Dann würdest du gehen wie:
final Intent intent = new Intent(this,B.class)
intent.setAction(ACTION_DO_C);
startActivityForResult(intent,ONE);
Und in Aktivität B
Sie erhalten die Aktion einfach:
getIntent().getAction();
Sie können getCallingActivity() verwenden, um die Aktivität abzurufen, die die aktuelle Aktivität gestartet hat und die am Ende den Ergebniswert mit dem Antwortcode erhält.