Hallo zusammen,
um mein Problem zu skizzieren muss ich wohl etwas ausholen (in der Hoffnung, es gibt noch einen ganz anderen, einfacheren Weg):
meine App - bzw. die Launcher-Activity - lädt zum Programmstart (onCreate()) Daten aus verschiedenen (Text) Dateien.
Während der Ausführung werden diese Daten dann modifiziert und zu onDestroy() wieder gespeichert. In einer zweiten Activity ("Add"), die sich von der Hauptactivity ("Main") aus aufruft, lassen sich weitere Daten hinzufügen.
Die Daten sind in einer öffentlichen public static ArrayLis<String> von Main gespeichert
Erstes Problem: wenn Add wieder beendet wird, wird bei Main wieder onCreate() aufgerufen, die Daten werde also neu geladen, bevor die Daten aus Add gespeichert werden konnten. Diese Daten sind also wieder weg.
Um dieses Problem zu lösen, wollte ich Add mit setResult() die neuen Daten zurückgeben, damit sie dann mit onActivityResult() verarbeitet werden können.
Das führt zu meinem zweiten und eigentlichen Problem: onActivityResult() wird nie aufgerufen. Main empfängt die Daten gar nicht erst.
Ich starte Add durch folgenden Code:
cmdAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent addActivity = new Intent(Main.this, Add.class);
startActivityForResult(addActivity, RQCODE_ADD);
}
});
in onActivityResult() passiert folgendes:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RQCODE_ADD) {
if (resultCode == Activity.RESULT_OK){
int index;
ArrayList<String> toAdd = data.getStringArrayListExtra("toAdd");
for (String s : toAdd){
// Verarbeitung der Daten
}
}
}
}
Alles anzeigen
und gesendet werden die Daten zu onDestroy() in Add:
@Override
protected void onDestroy(){
Intent data = new Intent();
Bundle bundle = new Bundle();
bundle.putStringArrayList("toAdd", toAdd); // toAdd ist eine ArrayList<String> mit den hinzuzufügenden Daten
data.putExtras(bundle);
setResult(Activity.RESULT_OK, data);
super.onDestroy();
}
Alles anzeigen
wobei onDestroy() auch wirklich aufgerufen wird...
Was läuft hier also falsch bzw. welchen Anfängerfehler habe ich begangen? (Muss ich den Intent registrieren? ist setResult() hier fehl am Platz? was auch immer...)
Wäre für jedwede Denkanstöße dankbar
Grüße!