Android: Wie kann eine Aktivität dazu führen, dass Ergebnisse zu der Aktivität zurückkehren, die sie aufruft?

128

Ich habe eine LocationAktivität, die von vielen Aktivitäten wie Sign upund aufgerufen werden kann Order. In der LocationAktivität gibt der Benutzer seinen Standort ein, sodass die Aktivität Locationdiesen neuen Standort an die Aktivität zurückgibt, die ihn aufgerufen hat.

Wenn die Sign upAktivität die Aktivität aufruft Location, muss sie die Daten an die Sign upAktivität zurückgeben. Ein anderes Mal wird die OrderAktivität dasselbe tun.

Hinweis

Ich weiß, dass Sie mir sagen werden, dass ich den Code veröffentlichen soll, aber ich bitte Sie nicht, mir den Code zu geben. Ich möchte nur ein paar Tipps, Links oder gute Themen.

Benutzer Benutzer
quelle
Sie können finish () verwenden, um zurück zu rufen ..
Harshid
1
Haben Sie StartActivityForResult developer.android.com/reference/android/app/Activity.html
vinaykumar
@ Harshid würden Sie mir bitte mehr Details geben, oder wenn Sie Links haben, die geschätzt würden
Benutzer Benutzer

Antworten:

252

Um eine Aktivität zu starten, die das Ergebnis zur aufrufenden Aktivität zurückgeben soll, sollten Sie Folgendes tun. Sie sollten den Anforderungscode wie unten gezeigt übergeben, um festzustellen, ob Sie das Ergebnis der von Ihnen gestarteten Aktivität erhalten haben.

startActivityForResult(new Intent(“YourFullyQualifiedClassName”),requestCode);

In der Aktivität können Sie das setData()Ergebnis zurückgeben.

Intent data = new Intent();
String text = "Result to be returned...."
//---set the data to pass back---
data.setData(Uri.parse(text));
setResult(RESULT_OK, data);
//---close the activity---
finish();

Also schreiben Sie in der ersten Aktivität den folgenden Code in onActivityResult ()

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == request_Code) {
        if (resultCode == RESULT_OK) {
            String returnedResult = data.getData().toString();
            // OR
            // String returnedResult = data.getDataString();
        }
    }
}

BEARBEITEN Sie basierend auf Ihrem Kommentar: Wenn Sie drei Zeichenfolgen zurückgeben möchten, verwenden Sie anschließend Schlüssel / Wert-Paare mit Absicht, anstatt Uri zu verwenden.

Intent data = new Intent();
data.putExtra("streetkey","streetname");
data.putExtra("citykey","cityname");
data.putExtra("homekey","homename");
setResult(RESULT_OK,data);
finish();

Holen Sie sie in onActivityResult wie folgt :

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == request_Code) {
        if (resultCode == RESULT_OK) {
            String street = data.getStringExtra("streetkey");
            String city = data.getStringExtra("citykey");
            String home = data.getStringExtra("homekey");
        }
    }
}
Kanth
quelle
Was hast du gesagt? Ich verstehe Ihren letzten Kommentar nicht. Tut mir leid, ich bin kein gutes Englisch. Ich versuche jetzt Ihren Code. Was requestcodekann ich in eine ganze Zahl setzen?
Benutzer Benutzer
1
Ich sagte: Keine Probleme (No Problems, NP), und wie Sie sagten, Sie könnten dies zu spät umsetzen, antwortete ich, dass Sie sich Zeit nehmen und es dann kommentieren sollten, damit ich benachrichtigt werden kann. Wenn Sie zum Anforderungscode kommen, können Sie einen ganzzahligen Wert wie int requestCode = 1 angeben.
Kanth
Ja, es funktioniert richtig. Ich akzeptiere Ihre Antwort. Vielen Dank. Ich möchte Sie fragen, ob es einen Weg gibt, also nicht nur einen String zu senden. Ich möchte 3 Strings senden, wie "Stadt", "Straße", " home ", gibt es eine Möglichkeit, die Saiten zu beschriften?
Benutzer Benutzer
Ihre Antwort ist sehr gut. Wenn Sie möchten, bearbeiten Sie den Titel, damit viele Benutzer danach suchen können
Benutzer Benutzer
Ich habe nach einer Möglichkeit gesucht , die Absicht zu erstellen : new Intent(this, OtherActivity.class);Ich kann diesen Code in einer Aktivität verwenden.
Benutzer
3

Wenn Sie fertig sein und nur ein resultCode(ohne Daten) hinzufügen möchten , können Sie setResult(int resultCode)vorher anrufen finish().

Beispielsweise:

...
if (everything_OK) {
    setResult(Activity.RESULT_OK); // OK! (use whatever code you want)
    finish();
}
else {
   setResult(Activity.RESULT_CANCELED); // some error ...
   finish();
}
...

Überprüfen Sie dann in Ihrer Anrufaktivität, resultCodeob wir in Ordnung sind.

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == someCustomRequestCode) {
        if (resultCode == Activity.RESULT_OK) {
            // OK!
        }
        else if (resultCode = Activity.RESULT_CANCELED) {
            // something went wrong :-(
        }
    }
}

Vergessen Sie nicht, die Aktivität mit anzurufen startActivityForResult(intent, someCustomRequestCode).

lenooh
quelle
4
Der Wert von Activity.RESULT_OKist tatsächlich -1für den Fall, dass das jemanden verwirrt. Ich würde nur vorschlagen, die ActivityKonstanten zu verwenden
jacoballenwood