ListPreference erstellen

D

Duckemai

Fortgeschrittenes Mitglied
6
Hallo zusammen,

ich bastel derzeit an meinem ersten Menü. Dafür habe ich die Tutorials und Einträge im Internet genutzt. Aber nun hänge ich doch fest. Vielleicht kann mir hier jemand weiterhelfen?

Ich habe eine Hauptklasse und eine Preferenceklasse erstellt.

Ich möchte per ListPreference das Hintergrundbild der App ändern.
(Defaultbild ist hier: main.xml : android:background="@drawable/Bild1")
Das Menü kann ich aufrufen, auch öffnet sich dort nun die Liste, mit den Namen der Bilder (arrays.xml), die ich auswählen kann. Aber in welcher Klasse (Hauptklasse oder PreferenceActivity) lese ich den Wert aus und worin ist er eigentlich zwischengespeichert?

Vielen Dank
Duckemai
 
Zuletzt bearbeitet:
Die ListPreference sollte den Wert eigentlich in deine Preference Datei speichern.
 
  • Danke
Reaktionen: Duckemai
Wie wird dieser Wert denn ausgelesen? Kann mir jemand dazu ein Beispiel nennen?
 
Duckemai schrieb:
Wie wird dieser Wert denn ausgelesen? Kann mir jemand dazu ein Beispiel nennen?

Stichwort: Sharedpreference
Schreiben:
Code:
SharedPreferences mySP = getSharedPreferences("MEINXYNAME", Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = mySP.edit();
editor.putString("StringKey", "InhaltXY");
editor.commit();

Lesen:
Code:
SharedPreferences mySP = getSharedPreferences("MEINXYNAME", Activity.MODE_PRIVATE);
mySP.getString("StringKey", "DefaultWert");

Gutes Tutorial: Android Preferences | Kaloer.com

Viel Spaß :D
 
  • Danke
Reaktionen: Duckemai
Ja, das macht viel Spass :mad:

Danke für den Beitrag. Ich kannte das Tutorial, komme aber nicht damit zurecht. Ich habe mir nun ein kleines App geschrieben, um das Problem zu vereinfachen. Ich kann nun die ListPreference aufrufen und einen Wert auslesen. (Die stehen in einer arrays.xml)

In der Hauptactivity habe ich einen Button mit dem ich auch den Wert bekomme:

String hintergrundFarbe = preferences.getString("Hintergrundbild", null);
Toast.makeText(HelloPreferences.this,
"You maintained user: " + hintergrundFarbe,
Toast.LENGTH_SHORT).show();

(Ergebnis: "Bild2.jpg")

Das ist schon mal super. Danke dafür :)

Ziel ist aber, dass dieser String (Bild2.jpg) direkt im Hauptprogramm das bestehende Hintergrundbild ersetzt. Das ursprüngliche Bild ist in der main.xml verankert. Ich finde aber keine Methode, die in dem Moment, in dem ich die Listauswahl der Bilder antippe, anspringt, um nun das Bild zeitgleich durch das Neue zu ersetzen. In welcher Methode muss ich das machen? Die onCreate in der PreferenceActivity springt ja bereits an, wenn ich den Menüknopf drücke und noch bevor ich die Auswahl getroffen habe.

Vielen Dank!

PS: Braucht man diesen "Editor" überhaupt? Geht doch auch ohne!
 
Mach dir einen OnSharedPreferenceChangeListener und hänge den an die SharedPreferences. Dann wirst du benachrichtigt wenn sich der Wert ändert.
Alternative kannst du in onCreate() und onResume() jedesmal checken welches Hintergrundbild du anzeigen sollst.
 
  • Danke
Reaktionen: Duckemai
Ok, erst mal vielen Dank an Euch beide. Die Hälfte habe ich nun tatsächlich nach einem Tag hinbekommen. :o

In der Preference.java habe ich den
OnSharedPreferenceChangeListener
eingehängt, und er gibt mir die Values der arrays.xml aus.

Nur, kann ich von der Preference.java aus den Background verändern? Davon abgesehen, dass ich mir nicht klar darüber bin, wie man einen Background anspricht (mit Buttons heißt das Objekt "Button". Aber wie heißt es für einen Background?) kann ich aber hier keinen Zugriff
auf das Layout nehmen. Die Buttons und der Background von der Hauptaktivity sind hier nicht erreichtbar. Muss ich den gewonnenen Wert jetzt rüberkarren oder gibt es eine Möglichkeit, den Hintergrund in der Preference.java anzusprechen?

Danke nochmals
 
Hab ich doch oben geschrieben. Nutze in der Main Activity den Listener um mitzubekommen wann sich der Wert für den Background ändert. Alternativ hol dir den Wert bei onCreate und onResume aus den Preferences und setze den Hintergrund.
Und setBackground ist ein Teil von View und du kannst es einfach auf dein oberstes View Element anwenden.
 
  • Danke
Reaktionen: Duckemai
Ich versuche nun das neue .jpg für den Hintergrund über onResume zu übergeben.

Die Methode setBackground kann ich aber nicht finden.

Es gibt 3 Methoden, die aber nicht auf ein jpg anzuwenden sind:

View v = v.setBackgroundColor(int); //nimmt nur Farbe auf
View v = v.setBackgroundDrawable(d); //nimmt nur ein Drawable auf. Wenn ich bei Strings.xml als value "Bild2.jpg" eingeben, dann dreht Eclipse durch
View v = v.setBackgroundResource(resid); //nimmt wieder kein jpg auf

Weißt Du, wie ich in dem Background das neue JPG übergeben kann (zB: als String mit dem Bildnamen ("Bild2.jpg")) ?
 
Ok. Das habe ich nun versucht:

String hintergrundFarbe = preferences.getString("Hintergrundbild", null);

final View view = this.findViewById(R.id.hinterGrund);
final BitmapDrawable bgImage = (BitmapDrawable) this.getResources().getDrawable(R.id.preferences);
view.setBackgroundDrawable(bgImage);

Aber er lies das neue Bild nicht ein. In "hintergrundFarbe" steht nun "Bild2.jpg".
Aber ist es richtig, bei getDrawable die preference zu übergeben. Ich
bin mir nicht sicher, was mit getDrawable(resID) gemeint ist. Muss ich da noch was definieren?

Danke
Duckemai
 
Habe nun herausgefunden, dass die ResId automatisch vergeben wird. Das wusste ich nicht. Und daher auch nicht, dass mit dem
Bildnamen die ResId vorliegt. Ich suchte immer noch eine Möglichkeit, die ID dem System bekannt zu geben.
Jetzt klappt's auch.

Vielen Dank an Euch, :)
Duckemai
 

Ähnliche Themen

5
Antworten
0
Aufrufe
1.141
586920
5
R
Antworten
6
Aufrufe
995
swa00
swa00
W
Antworten
2
Aufrufe
739
rene3006
R
Zurück
Oben Unten