Ich habe vier Aktivitäten, z. B. A, B, C und D. Meine Situation ist, dass A die Aktivität B mit startActivityForResult startet.
startActivityForResult(new Intent(this,B.class),ONE);
In einer anderen Situation werde ich B mit einer anderen Situation. mögen
startActivityForResult(new Intent(this,B.class),TWO);
In B muss ich je nach requestCode C oder D aufrufen. Dh wenn EINER C sonst D starten muss.
Also muss ich wissen, wie man den requestCode in der untergeordneten Aktivität überprüft (B hier).
Mit anderen Worten, ich möchte den Anforderungscode erhalten, mit dem Aktivität B gestartet wurde.
Der Anforderungscode wird nicht automatisch an die gestartete Aktivität übergeben, da dieser Wert nicht bekannt sein 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 Aufrufs einer Methode. Wenn Sie eine Methode aufrufen, erhalten Sie das Ergebnis synchron (genau dort, wo Sie den Aufruf getätigt haben). In diesem Fall geben Sie nur die Informationen weiter, die die Methode für ihre Arbeit benötigt. Sie sagen nicht, woher Sie es gerufen 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 mit dem gerade erhaltenen Ergebnis zu tun ist, und Sie haben den Anforderungscode dafür.
Um ein bisschen klarer zu machen, warum es keine gute Idee ist, den Anforderungscode als Parameter zu übergeben, betrachten Sie die Beispielaktivität, in der ein Produkt angezeigt wird, das Sie kaufen können. Bei dieser Aktivität gibt es zwei Schaltflächen mit den Bezeichnungen "Kaufen" und "Anmelden" (da Sie derzeit nicht angemeldet sind). Durch Drücken von "Anmelden" wird eine Aktivität mit dem Namen "Anmelden" gestartet, bei der versucht wird, sich mit den angegebenen Informationen beim Benutzer anzumelden. Durch Drücken von "Kaufen" wird zuerst dieselbe "Anmeldeaktivität" gestartet. Wenn die Anmeldung erfolgreich war, starten Sie die Kaufaktivität.
Jetzt verwendet die Schaltfläche "Anmelden" den Anforderungscode 1, um die Anmeldeaktivität zu starten. Die Schaltfläche "Kaufen" kann jedoch nicht denselben Anforderungscode verwenden, da bei erfolgreicher Anmeldung etwas anderes ausgeführt werden muss. 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 sie aufgerufen wurden. Sie müssen jedoch genau das gleiche Verfahren ausführen.
Wenn Sie also den Anforderungscode als Parameter übergeben, erhalten Sie Code, der für einige verschiedene Anforderungscodes dasselbe tun muss, z.
Am Ende werden Sie auch die Anforderungscodekonstanten an einem zentralen Ort speichern, z. B. in einer Klasse mit dem Namen RequestCodes.
Kurz gesagt, der Anforderungscode sollte nur verwendet werden, um zu entscheiden, was mit dem empfangenen Ergebnis geschehen soll. Auf diese Weise erhalten Sie einen modulareren, einfacher zu wartenden und zu erweiternden Code.
quelle
Am Ende habe ich eine benutzerdefinierte Absichtsaktion verwendet, um diese Art von Informationen an die Startaktivität zu übergeben.
Dann würden Sie gehen wie:
Und in Aktivität erhalten
B
Sie die Aktion leicht:quelle
Mit getCallingActivity () können Sie die Aktivität abrufen, mit der die aktuelle Aktivität gestartet wurde und die am Ende den Ergebniswert mit dem Antwortcode erhält.
quelle