Dateneingabe über mehrere Activitys/Layouts

T

TM76

App-Anbieter (kostenlos)
6
vorab: sorry, ich bin absoluter Anfänger was Java/Android-Entwicklung angeht :rolleyes2:

Ich schreibe gerade eine App, in der über mehrere Activitys/Layouts Zahlen in EditText-Felder eingegeben werden. Wie das Weitergeben der Infos an die nächste Activity funktioniert, habe ich schon rausgefunden.

Nun würde ich aber gern nach der ersten Acrivity einen "zurück-Button" einbauen, um auf das Formular auf der vorherigen Seite zu gelangen. Leider sind da die Felder dann wieder leer. Gibt es eine Möglichkeit, dass sich die App die Inhalte der Felder "merkt" (und diese automatisch wieder so gefüllt sind), oder muss ich wirklich auch für den "Rückweg" wieder eine Übergabe aller Werte programmieren und die Textfelder dann damit befüllen? :confused2:

Oder ist es sogar eher überlich, alle Formulare in EINE Activity zu packen, und die entsprechenden Felder sichtbar/unsichtbar zu machen?
 
Wenn du deine neue Activity starten willst, musst du nicht zwangsweise die alte schließen.
Du kannst sie im Hintergrund einfach offen lassen und beim Zurück-Button wird die aktuelle (neue) Activity geschlossen und die alte ist wieder da.
Musst nur aufpassen das du nicht zu viele Activitys im Hintergrund hast, weil wegen Speicher.
 
Es gibt zwei Möglichkeiten, die mir spontan einfallen.

Die erste nicht so elegante Möglichkeit wäre es die vorherige Activity beim starten der aktuellen zu beenden. Und dann den Backbutton so überschreiben, das er die vorherige Activity wieder startet, und die Daten übergibst du dann wie immer. Mit ein bisschen tricksen, geht es auch nicht ganz so rabiat.

Die zweite Möglichkeit wäre es, die Daten persistent zu speichern. Entweder benutzt du eine SQLite Datenbank oder die SharedPreferences für das speichern deiner Daten.

Storage Options | Android Developers

Storage Options | Android Developers

Was du benutzt, hängt von den Daten ab. Ich würde die zweite Möglichkeit immer vorziehen.
 
joshua1996 schrieb:
Wenn du deine neue Activity starten willst, musst du nicht zwangsweise die alte schließen.
Du kannst sie im Hintergrund einfach offen lassen und beim Zurück-Button wird die aktuelle (neue) Activity geschlossen und die alte ist wieder da.
Musst nur aufpassen das du nicht zu viele Activitys im Hintergrund hast, weil wegen Speicher.


Wie genau mache ich das? Explizit sage ich im Code gar nicht, dass diese geschlossen werden soll:

Button "weiter" in Activity1:

Code:
            final Button btnDetail=(Button) findViewById(R.id.btnWeiter);
            btnDetail.setOnClickListener(new OnClickListener() {
                public void onClick(View view) {
                    Intent detailIntent = new Intent(MainActivity.this,Screen2.class);
                    startActivity(detailIntent);
                }
            });
Button "zurück" in Aktivity2:
Code:
        final Button btnDetail=(Button) findViewById(R.id.btnZurueck);
        btnDetail.setOnClickListener(new OnClickListener() {
            public void onClick(View view) {
                Intent detailIntent = new Intent(Screen2.this,MainActivity.class);
                startActivity(detailIntent);
            }    
        });
Evtl. ist es die Activity1 noch offen, oder? Evtl. muss ich beim Zurückbutton das "startActivity" durch etwas anderes ersetzen (sowas wie "showActivity")?

Bitte nicht über den Code meckern. Das ist alles nur Copy-Paste-Adjust:winki:
 
So einfach ist es leider nicht. Wenn eine Activity in den Hintergrund geht, wird nicht der komplette Zustand vom System gespeichert. Das Stichwort dazu ist Lifecycle.

Wenn du den gleichen Zustand haben willst, bevor die App in den Hintergrund ging, muss du ihn wieder herstellen. Wie du das machst, sei dir überlassen:

Pausing and Resuming an Activity | Android Developers

Stopping and Restarting an Activity | Android Developers

Recreating an Activity | Android Developers

Am einfachsten speicherst du die Daten in onPause() persistent (SQL o. SharedPreferences). Und lädst sie in onResume() wieder.
 
super, vielen Dank. Da gibts noch ne Menge google-copy-paste-adjust für mich zu tun ;) Aber so hab ich bisher alle meine Programmierfähigkeiten gelernt ;)
 
Statt in deinem zurück-Button die vorherige Activity wieder manuell zu starten, solltest du einfach nur finish() aufrufen:

Code:
final Button btnDetail=(Button) findViewById(R.id.btnZurueck);
        btnDetail.setOnClickListener(new OnClickListener() {
            public void onClick(View view) {
                finish();
            }    
        });

um alles andere kümmert sich Android, ausser du hast das irgendwo im XML anders definiert (z.B. durch noHistory = true). Textfelder werden von Android also automatisch wieder so gefüllt, wie sie vorher waren. (Solange du die erste Activity nicht explizit schliesst oder spezielle Methoden dafür überschreibst)

Falls du z.B. auch einen Speichern-Button hast und noch ein Resultat zurückgeben willst:
Benutze in der ersten Activity statt startActivity(...) dann startActivityForResult(...). In der zweiten Activity setzt du vor finish() noch das Resultat mit setResult(...).

Mehr dazu findest du hier.
 
Zuletzt bearbeitet:
Super. Vielen Dank für die schnelle und tolle Unterstützung hier! :thumbsup: Habs inzwischen über SharedPreferences gelöst
 

Ähnliche Themen

S
Antworten
4
Aufrufe
4.430
mblaster4711
mblaster4711
L
Antworten
5
Aufrufe
815
swa00
swa00
A
Antworten
1
Aufrufe
636
swa00
swa00
Zurück
Oben Unten