android - titel - title tag wordpress




Wie man `startActivityForResult` auf Android verwaltet? (6)

Wie überprüft man das Ergebnis der Hauptaktivität?

Sie müssen Activity.onActivityResult() überschreiben und dann seine Parameter überprüfen:

  • requestCode , welche App diese Ergebnisse zurückgegeben hat. Dies wird von Ihnen beim Aufruf von startActivityForResult() .
  • resultCode informiert Sie, ob diese App erfolgreich war, fehlgeschlagen ist oder etwas anderes
  • data alle Informationen, die von dieser App zurückgegeben werden. Dies kann null .

In meiner Aktivität rufe ich eine zweite Aktivität aus der Hauptaktivität von startActivityForResult . In meiner zweiten Aktivität gibt es einige Methoden, die diese Aktivität beenden (vielleicht ohne Ergebnis), aber nur eine von ihnen gibt ein Ergebnis zurück.

Zum Beispiel rufe ich von der Hauptaktivität eine zweite auf. In dieser Aktivität überprüfe ich einige Funktionen des Handapparates wie zB eine Kamera. Wenn dies nicht der Fall ist, schließe ich diese Aktivität. Bei der Vorbereitung von MediaRecorder oder MediaRecorder falls ein Problem MediaRecorder schließe ich diese Aktivität.

Wenn das Gerät eine Kamera hat und die Aufnahme vollständig ist, dann wird nach dem Aufnehmen eines Videos, wenn ein Benutzer auf die Schaltfläche Fertig klickt, das Ergebnis (Adresse des aufgezeichneten Videos) zurück an die Hauptaktivität gesendet.

Wie überprüfe ich das Ergebnis der Hauptaktivität?


Der Anwser von @Nishant ist korrekt. In meinem Fall wurde das onActivityResult aufgrund der Einstellungen in AndroidManifest nie aufgerufen. Stellen Sie sicher, dass Ihre zweite Aktivität (oder der Absender) diese Zeile nicht im Android-Manifest festgelegt hat.

<activity android:name=".SecondViewActivity"
            android:parentActivityName=".FirstActivity"/>

Wenn ja, entferne bitte android:parentActivityName=".FirstActivity"


Für diejenigen, die Probleme mit falschem requestCode in onActivityResult haben

Wenn Sie startActivityForResult() von Ihrem Fragment aufrufen, wird der startActivityForResult() von der Aktivität geändert, die das Fragment besitzt.

Wenn Sie in Ihrer Aktivität den richtigen resultCode erhalten möchten, versuchen Sie Folgendes:

Veränderung:

startActivityForResult(intent, 1); Zu:

getActivity().startActivityForResult(intent, 1);


Sehr häufiges Problem bei Android
Es kann in 3 Teile zerlegt werden
1) starte Aktivität B (passiert in Aktivität A)
2) Setze die angeforderten Daten (geschieht in der Aktivität B)
3) Erhalte die angeforderten Daten (passiert in Aktivität A)

1) startActivity B

Intent i = new Intent(A.this, B.class);
startActivity(i);

2) Stellen Sie die angeforderten Daten ein

In diesem Teil entscheiden Sie, ob Sie bei einem bestimmten Ereignis Daten zurücksenden wollen oder nicht.
ZB: In Aktivität B gibt es einen EditText und zwei Buttons b1, b2.
Ein Klick auf Button b1 sendet Daten zurück an die A-Funktion
Ein Klick auf Button b2 sendet keine Daten.

Daten senden

b1......clickListener
{
   Intent resultIntent = new Intent();
   resultIntent.putExtra("Your_key","Your_value");
   setResult(RES_CODE_A,resultIntent);
   finish();
}

Keine Daten senden

b2......clickListener
    {
       setResult(RES_CODE_B,new Intent());
       finish();
    }

Benutzer klickt auf die Schaltfläche Zurück
Standardmäßig wird das Ergebnis mit dem Activity.RESULT_CANCEL-Antwortcode festgelegt

3) Ergebnis abrufen

Für diese Überschreibung onActivityResult-Methode

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);

if (resultCode == RES_CODE_A) {

     // b1 was clicked 
   String x = data.getStringExtra("RES_CODE_A");

}
else if(resultCode == RES_CODE_B){

   // b2 was clicked

}
else{
   // back button clicked 
}
}

Zuerst verwenden Sie startActivityForResult() mit Parametern in der ersten Activity und wenn Sie Daten von der zweiten Activity an die erste Activity senden möchten, übergeben Sie den Wert mit Intent mit der Methode setResult() und onActivityResult() diese Daten in der Methode onActivityResult() in der ersten Activity .


FirstActivity Sie FirstActivity von Ihrer FirstActivity SecondActivity mit der startActivityForResult() -Methode auf

Beispielsweise:

Intent i = new Intent(this, SecondActivity.class);
startActivityForResult(i, 1);

SecondActivity Sie in Ihrer SecondActivity die Daten fest, die Sie an FirstActivity zurückgeben FirstActivity . Wenn Sie nicht zurückkehren möchten, stellen Sie keine ein.

Zum Beispiel: In secondActivity, wenn Sie Daten zurücksenden wollen:

Intent returnIntent = new Intent();
returnIntent.putExtra("result",result);
setResult(Activity.RESULT_OK,returnIntent);
finish();

Wenn Sie keine Daten zurückgeben möchten:

Intent returnIntent = new Intent();
setResult(Activity.RESULT_CANCELED, returnIntent);
finish();

Schreiben Sie jetzt in Ihrer FirstActivity-Klasse den folgenden Code für die onActivityResult() -Methode.

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == 1) {
        if(resultCode == Activity.RESULT_OK){
            String result=data.getStringExtra("result");
        }
        if (resultCode == Activity.RESULT_CANCELED) {
            //Write your code if there's no result
        }
    }
}//onActivityResult




startactivityforresult