Zuletzt geöffnete Activity als künftige StartActivity speichern

  • Antworten:4
  • Bentwortet
iRazoR
  • Forum-Beiträge: 66

18.04.2013, 07:57:24 via Website

Hallo Leute,

ich bin gerade dabei eine App mit mehreren Activities zu entwickeln. Das ist soweit auch kein Problem und funktioniert auch, jedoch fehlt mir noch eine Funktion:

Wie setze ich es um, dass beim nächsten Start der App (also nicht nur nach Pausieren, sondern auchnach Neustart des Gerätes usw.) die zuletzt geöffnete Activity gestartet wird?

Ich habe bereits herausgefunden, das sich das relativ einfach mit den sharedPreferences umsetzen lassen soll, jedoch habe ich damit noch nicht gearbeitet und mir fehlt ein wenig der Durchblick.

Hier ist eine Möglchkeit beschrieben: http://stackoverflow.com/questions/2441203/how-to-make-an-android-app-return-to-the-last-open-activity-when-relaunched

Zitat:
So in every activity you want to re-start automatically:

@Override
protected void onPause() {
super.onPause();

SharedPreferences prefs = getSharedPreferences("X", MODE_PRIVATE);
Editor editor = prefs.edit();
editor.putString("lastActivity", getClass().getName());
editor.commit();
}

And a Dispatcher activity similar to the following:

public class Dispatcher extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

Class<?> activityClass;

try {
SharedPreferences prefs = getSharedPreferences("X", MODE_PRIVATE);
activityClass = Class.forName(
prefs.getString("lastActivity", Activity1.class.getName()));
} catch(ClassNotFoundException ex) {
activityClass = Activity1.class;
}

startActivity(new Intent(this, activityClass));
}
}

Remarks

You could create a base class for the onPause override
The Dispatcher activity obviously needs to be the android.intent.action.MAIN action

Die grundlegende Funktion ist klar: Der Dispatcher wird bei jedem Start als erste Activity aufgerufen und routet an die entsprechend zu letzt gespeicherte Activity um. Allerdings komme ich mit der Syntax nicht ganz klar. Kann mir bitte jemand auf die Sprünge helfen und es mit menschlichen Worten erklären? Speziell der Try&Catch Teil ist mir nicht ganz klar.

Danke schonmal an alle Antwortenden :-)

Antworten
impjor
  • Forum-Beiträge: 1.793

18.04.2013, 14:54:07 via App

In jeder Activity wird, wenn sie pausiert ist, der Name als String in den SharedPreferences gespeichert. Im Try-Teil wird eine neue Activity erzeugt, je nach Klassen-Name in den SharedPreferences. Der cath sorgt dafür, wenn die Activity nicht existiert, weil der Name im String falsch ist.
Gruß

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
iRazoR
  • Forum-Beiträge: 66

18.04.2013, 16:11:16 via App

Hi impjor

wieder mal ein Dank an dich für die Antwort.

Nun ist es schon etwas klarer aber könntest du bitte noch auf die Stelle mit dem ("X"; MODE_PRIVATE) eingehen und vielleicht klarstellen, was anstelle von "Activity1" hingehört? Das muss doch eine der bestehenden Activities werden oder liege dich da falsch?

Antworten
impjor
  • Forum-Beiträge: 1.793

18.04.2013, 21:51:47 via App

Du bekommst via getSharedPreferences ein SharedPreferences Objekt, welches ALLE Name-Wert Paare des Bereiches "X" speichert. Das X ist frei wählbar, ebenso wie die Namen der Paare.
Im nächsten Schritt wird über getString der Wert des entsprechenden Namen (1. Parameter) zurückgegeben. Doch was, wenn dieser nicht gesetzt wurde? Der 2. Parameter wird dann zurückgegeben. Also ist Activity1 die Standard-Activity die beim ersten mal bzw. wenn der User die App-Daten löscht aufgerufen wird.

Nur zu empfehlen: http://developer.android.com/guide/topics/data/data-storage.html#pref

Gruß

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
iRazoR
  • Forum-Beiträge: 66

21.04.2013, 08:08:49 via Website

Danke für die Erklärung. Ich werde mal schauen ob ich es hinbekomme

Antworten