Preferences Backup erstellen und wiederaufrufen

  • Antworten:4
Gelöschter Account
  • Forum-Beiträge: 21

05.02.2011, 14:30:03 via Website

Hallo,

ich stehe vor folgendem Problem:
Activity1 startet eine PreferenceActivity und die kehrt dann zur Activity1 zurück.
In der PreferenceActivity möchte ich dann gerne einige Preferences (Checkboxen, EditText, Listen..) editieren/ändern.
Im unteren Teil des Screens befinden sich noch 2 Buttons.
Bei Klick auf Button 1 (OK) soll einfach zu Activity 1 zurückgekehrt werden (dass heißt Änderungen der Preferences werden übernommen).
Beim Klick auf Button 2 (Abbruch), sollen wieder die Einstellungen übernommen werden die PrefenceActivity vor ihrem Aufruf hatte.

Ich habe im Internet etwas über "BackupAgents" gelesen mit denen man anscheinend unteranderem Backup von Preferences erstellen kann.

Link:
http://developer.android.com/reference/android/app/backup/SharedPreferencesBackupHelper.html

ich lade mir die Preferences mit folgendem Code:
1SharedPreferences preferences;
2preferences = PreferenceManager.getDefaultSharedPreferences(this);


Hat jemand damit Erfahrung und kann mir vielleicht ein explizites Beispiel geben mit z.B. 3 Preferences mit den Namen "Preference1", "Preference2" und "Preference3"?

Danke im Vorraus

Antworten
Markus Gu
  • Forum-Beiträge: 2.644

05.02.2011, 14:32:24 via Website

was du brauchst ist kein backup von preferences.

speicher deine preferences doch erst, wenn du OK klickst. wenn du abbrichst, mach einfach nichts.

es gibt die möglichkeit dinge auf google servern zu speichern. dient aber nicht wirklich als hilfe bei deinem problem

swordiApps Blog - Website

Antworten
Gelöschter Account
  • Forum-Beiträge: 21

05.02.2011, 14:40:15 via Website

Entschuldigung wenn ich Frage, aber prefernces ändern doch sofort ihren wert sobald man da etwas ändert, oder nicht? Ich Rede nicht von normalen EditTextviews, oder etwas dergleichen ;)

Antworten
Markus Gu
  • Forum-Beiträge: 2.644

05.02.2011, 15:13:21 via Website

ja, das ist auch der ablauf, wie es android vorgibt und nicht dafür geeignet, wie du es willst.

als erstes soll gesagt sein: wenn du standard android verhalten ändern willst, solltest du einen guten grund dafür haben.

du könntest es wie folgt machen:

settings activity starten, preferences werte zwischenspeichern ( tmp datenstruktur oder ähnliches ), dann preferences ändern lassen und bei cancel werden die werte aus der tmp struktur in die "echten" preferences gespeichert. wenn ok gedrückt wird, ist sowieso alles bereits gespeichert.

das wäre eine mögliche variante.

swordiApps Blog - Website

Antworten
Gelöschter Account
  • Forum-Beiträge: 21

09.02.2011, 16:42:52 via Website

Danke Markus,
hatte mir es auch so gedacht, die Preferences temporär zwischenzuspeichern, was ich aber als ein wenig "unsauber" empfand. Hatte gehofft es gäbe einen "schöneren" Weg.
Falls es jemanden interessiert, habe die Preferences einzeln ausgelesen, ihre relevanten Werte zwischengespeichert und dann per Editor die Werte später wieder zurückgesetzt, falls Button (Abbruch) geklickt wurde.


Ich habe jetzt aber eine explizite andere Frage bezüglich eines kleinen Problems bei folgendem Code bei dem es sich um Listpreferences dreht:
1myListPreference.setOnPreferenceChangeListener(new ListPreference.OnPreferenceChangeListener()
2 {
3 public boolean onPreferenceChange(Preference preference, Object newValue)
4 {
5 String value = newValue.toString();
6 if(value.compareTo("1")==0) preference.setSummary(" Selection: "+myListPreference.getEntry());
7 else if (value.compareTo("2")==0) preference.setSummary(" Selection: "+myListPreference.getEntry());
8 return true;
9 }
10
11 });

In dem obigen Code soll sich die Summary ändern sobald sich etwas in der Preference tut. Bei mir dient die Summary dazu, die aktuelle Entry auf dem Screen anzuzeigen. Die Summary wird zwar neu gesetzt, jedoch immer erst beim nächsten PreferenceChange Aufruf.

Was ich nicht verstehe ist, dass doch in der Variable newValue der neue "EntryValue" Wert der ListPreference enthalten ist. Wie komme ich jetzt an den zugehörigen "Entry" Wert meiner Listpreference heran?

Gelöst habe ich es indem ich die Summary "statisch" neu beschrifte. Jedoch finde ich das nicht so gut.

1myListPreference.setOnPreferenceChangeListener(new ListPreference.OnPreferenceChangeListener()
2 {
3 public boolean onPreferenceChange(Preference preference, Object newValue)
4 {
5 String value = newValue.toString();
6 if(value.compareTo("1")==0) preference.setSummary(" Selection: MyEntry1");
7 else if (value.compareTo("2")==0) preference.setSummary(" Selection: MyEntry2");
8 return true;
9 }
10
11 });

Antworten