Rückgabewert von zweiter Aktivität mittels Back Taste

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • 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

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von fxbastler ()

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

    Java-Quellcode

    1. @Override
    2. public void onBackPressed() {
    3. Intent intent = new Intent();
    4. intent.putExtra("data", data);
    5. setResult(resultcode, intent);
    6. super.onBackPressed();
    7. }

    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.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Xcreen ()

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

    Quellcode

    1. // in second activity
    2. // der android back button unten links
    3. override fun onBackPressed() {
    4. val result = Intent()
    5. result.putExtra(EXTRA_TASK_DESCRIPTION, "Android Back Button pressed")
    6. setResult(Activity.RESULT_OK, result)
    7. super.onBackPressed()
    8. }
    9. // der back button in der ActionBar oben links
    10. override fun onSupportNavigateUp() : Boolean {
    11. val result = Intent()
    12. result.putExtra(EXTRA_TASK_DESCRIPTION, "ActionBar Back Button pressed")
    13. setResult(Activity.RESULT_OK, result)
    14. // super.onSupportNavigateUp() kein super. ....
    15. finish() // second activity wird geschlossen
    16. return(true) // <- muss trotzdem sein, fun meckert sonst rum
    17. }
    18. //in main activity
    19. override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    20. val task = data?.getStringExtra(activity_settings.EXTRA_TASK_DESCRIPTION)
    21. task?.let {
    22. if(task.isNotEmpty()) {
    23. // mache irgendwas mit dem Rueckgabewert der second activity in task
    24. }
    25. }
    Alles anzeigen
    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 :(

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von fxbastler ()

  • 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).