Rückgabewert von zweiter Aktivität mittels Back Taste

  • Hallo Forum,


    wie kann ich Daten zwischen verschiedenen Aktivitäten austauschen wenn ich in einer aufgerufenen Aktivität mittels der Android Taste Back unten oder der Pfeil zurück Taste links in der Actionbar der aufgerufenen Aktivität diese beende und zur aufrufenden Aktivität wechsle?


    Beispiel: ich habe eine App (Android Studio 3.3.2, Kotlin) mit einer Haupt- und einer zweiten Aktivität die untereinander Daten austauschen sollen. Prinzipiell kein Problem: die Hauptaktivität übergibt beim Start der zweiten Aktivität Parameter nach Bedarf mittels Intent und startet dann die zweite Aktivität mittels startActivityForResult. Dort kommen diese Daten an, alles gut. Wenn ich in der zweiten Aktivität einen Button definiere, über result.putExtra zurückzugebende Daten definiere und die zweite Aktivität dann mit finish() beende dann kommen diese Daten auch in der Hauptaktivität im Callback onActivityResult an. Aber wenn die zweite Aktivität mittels der Android Taste Back unten links oder der Pfeil zurück Taste oben links in der Actionbar der aufgerufenen Aktivität beende dann kann ich nichts übergeben. Ein override der Funktionen onStop, onPause, onDestroy und onRestart der zweiten Aktivität nutzt nichts. Diese werden wohl nicht benutzt weil in onActivityResult nichts ankommt. Wie komme ich weiter und kann Daten übergeben ohne expliziten Aufruf von finish()?


    danke vorab

  • Hi,
    dafür gibt es natürlich mehrere Ansätze.
    Eigentlich kannst du im onBackPressed das entsprechende Intent senden.

    Java
    @Override
    public void onBackPressed() {
        Intent intent = new Intent();
        intent.putExtra("data", data);
        setResult(resultcode, intent);
        super.onBackPressed();
    }


    Eine relative leichte Variante ist, das du die benötigen Daten in den Shared-Preferences speicherst und ausliest. Damit ist man relative flexible, auch wenn man über mehrere Activitys hinweg an Daten ran kommen musst.

  • Nachtrag für alle später Suchenden: es sind zwei Funktionen.

    Zur Erklärung: diese App soll generell keinerlei gespeicherte Daten / Einstellungen im System hinterlassen, shared preferences sind also keine Option. Erst wenn in einem Einstellungsdialog explizit lokales speichern aktiviert ist werden Daten persistent mittels shared preferences hinterlassen und bei Bedarf auch wieder entfernt. Da das per default nicht der Fall ist kann ich solche Funktionen nicht zur Übergabe von Daten zwischen activities benutzen :(

  • Zitat

    Erst wenn in einem Einstellungsdialog explizit lokales speichern aktiviert ist werden Daten persistent mittels shared preferences hinterlassen und bei Bedarf auch wieder entfernt.

    Mich würde interessieren, welchen Grund das hat?
    Du brauchst ja für Shared-Prefernces keine extra Berechtigungen und gewissen Komponenten (z.B. der Webview) schreiben, sowieso schon direkt in dein App-Verzeichnis. Das Verzeichnis wird bei der Installation sowieso erstellt und existiert damit. Eventuell wird es auch sowieso schon benutzt (auch wenn du meinst, das dort nichts hinterlassen werden soll).

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!