Text eines EditTextes in/aus einem Array bekommen?

  • Antworten:6
Ludwig H.
  • Forum-Beiträge: 3.256

15.05.2011, 17:06:09 via Website

Hi,

ich mache gerade dieses Tutorial: http://www.javacodegeeks.com/2011/01/android-quick-preferences-tutorial.html
Nun wollte ich so eine
1<EditTextPreference
2 android:key="welcome_message"
3 android:title="Welcome Message"
4 android:summary="Define the Welcome message to be shown"
5 android:dialogTitle="Welcome Message"
6 android:dialogMessage="Provide a message"
7 android:defaultValue="Default welcome message" />
EditTextPreference Box machen, die den eingegeben Wert in einen Array schreibt, damit man die Werte (die dann aus mehreren solchen Boxen kommen) in einem Spinner anzeigen lassen kann.
Leider klappt das nicht so wie ich will.
ich hab schon probiert den Wert einfach mit dem Array zu "verlinken":
1android:defaultValue="@array/wert1"
Aber da findet er die Resource nicht...

lg und Danke
Ludwig

— geändert am 15.05.2011, 17:06:53

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

15.05.2011, 18:36:48 via Website

Heyho,

die Daten, die in den Einstellungen gespeichert werden, musst du aus den Preferences "rauslesen".

Dazu erstelle ich bei meinen Apps immer eine Funktion getPrefs(), die in der onStart-Methode aufgerufen wird. Falls die Einstellungen während der Laufzeit der App verändert werden, werde sie beim Verlassen der Einstellungen sofort neu eingelesen und verarbeitet.
Die einzelnen Werte speichere ich dann global.

Hier ein Beispiel:
Du hast ne CheckBoxPreference mit dem Key "pref_check".
Den Wert dieser Einstellung, gespeichert in boolean checkisChecked, bekommst du dann über
1SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
2checkisChecked = preferences.getBoolean("pref_check", false);

Der erste Parameter der Funktion getBoolean beinhaltet den Key, dessen Wert du ermitteln willst, der 2. Parameter ist der default-Wert, falls der Key nicht existiert.

Viel Spaß beim weiteren Coden ;)

— geändert am 15.05.2011, 18:37:33

Gruß Oli - Diese Nachricht wurde mit einer Taschenlampe in das offenliegende Ende eines Glasfaserkabels gemorst! - Follow me on Twitter - AndroitPIT-Regeln

Antworten
Ludwig H.
  • Forum-Beiträge: 3.256

15.05.2011, 19:30:13 via App

Danke! Das war zwar nicht das was ich gesucht/gefragt habe, aber hilfreich wars! :D

Mir ging es drum, ob/wie es möglich ist die Eingabe einer EditTextPreference in einen Array zu stecken.
Ich will quasi eine Liste in den Einstellungen haben, wo man Wörter eintragen kann, die man dann danach mit einem Spinners auswählen kann. Am besten noch so, dass man beliebig viele Auswahlmöglichkeiten abspeichern kann. :)

Antworten
Ludwig H.
  • Forum-Beiträge: 3.256

16.05.2011, 20:08:32 via App

Hat keiner eine Idee wie man das lösen kann? :)

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

16.05.2011, 20:10:39 via App

Doch,
mit einer Datenbank. Oder du überlegst dir, wie du es schaffst dynamisch in den SharedPreferences zu speichern. In den Array, den du aus der XML liest, kannst du leider nicht schreiben..
Lg Ansgar
edit: Vielleicht schreib ich zu dem mit den SharedPreferences nachher mal ne kleine Klasse und poste die hier..

edit2: Und hier ist sie.. Man könnte statt der ArrayList auch einfach einen Array nehmen, aber egal :grin: (Achja: Habs noch nicht getestet, aber müsste eigentlich klappen..) Link zu Pastebin

— geändert am 16.05.2011, 21:13:43

Antworten
Ludwig H.
  • Forum-Beiträge: 3.256

17.05.2011, 16:24:53 via Website

Also wenn ich das richtig verstanden habe, ließt die Methode "readArray" die Einstellungen aus den SharedPreferences und speichert sie in einen Array. Die Methode "saveArray" macht es andersrum. Soweit klar. Nur was genau übergebe ich denn nun mit den Variablen values, key und ctx?

Danke auf jeden Fall! :)

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

17.05.2011, 17:17:38 via App

Hey,
values ist dein String Array, den du speichern und laden kannst.
key ist der "Schlüssel" mit dem du speicherst, oder den du laden willst. Sozusagen eine id, also den Namen, unter dem gespeichert werden soll.
Den Context ctx braucht man zum speichern und laden aus den SharedPreferences. (Da kannst du "getApplicationContext()" oder je nach Aufrufort einfach "this" reinschreiben.)
Das sind zwei statische Methoden, d.h. du kannst sie auch benutzen, ohne ein Objekt von ArrayHelper zu haben.
1String[] marray = new String[] {"bla","blu","ble","blo"};
2ArrayHelper.saveArray(marray,this,"marray");
3String[] geladenerArray = ArrayHelper.readArray(this, "marray");
So könnte das aussehen, weiß grad nicht mehr die Reihenfolge der Argumente in den Methoden, und deren Namen, aber ich glaub, die hießen so..
Lg Ansgar

— geändert am 17.05.2011, 17:19:38

Antworten