Sziasztok,
van egy preferences.xml-em, a releváns töredék:
<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <PreferenceCategory android:title="Időbeállítások" > <ListPreference android:defaultValue="15" android:entries="@array/listMinutesOffset" android:entryValues="@array/listMinutesOffsetValues" android:key="iMinutesOffset" android:title="Időbeosztás percekben" android:summary="a legkisebb választhatő időköz" />
A @array/listMinutesOffset ::= {10perc,15 perc,...}, a @array/listMinutesOffsetValues ::= {10,15,...}
Egy teljesen szimpla 3 soros Activityvel keztelem a preferences képernyőt:
public class Preferences extends PreferenceActivity { @Override protected void onCreate( Bundle savedInstanceState ) { super.onCreate( savedInstanceState ); addPreferencesFromResource( R.xml.preferences ); } /* ide kellene valami konverziós izé? */ } public class Prefs { private SharedPreferences prefs = null; public int iMinutesOffset; // offset start of new appointment public Prefs( Context ctx ) { prefs = PreferenceManager.getDefaultSharedPreferences( ctx ); Load(); } }
A kérdésem az, hogy hogyan lehet szabályozni azt, hogy a preferences.xml-ben felsorolt tagok milyen adattípusúak legyenek? A fenti kód ugyanis az iMinutesOffset értéket csak String-ként hajlandó beolvasni, ha int-ként próbálom az .edit(), aztán -commit() kiírni, utána cast hibát kapok.
Ezexerint pl. a putInt/getInt metódusok csak custom értékek tárolására használhatók?
Köszönöm
6 Comments
Auth Gábor
A ListPreference API szerint CharSequence-t fog visszaadni, mint entry, és entryValue... illetve az Preference ősosztályban a getKey() az String típusú... szóval ezeket konvertálni kell szám típusra, ha azt szeretnéd tárolni.
Franz Max
oké,
ezt a konverziót hol tudom megtenni? kerestem a PreferenceActivity-nek felülírható metódusát, amiben a stringként visszaadott értéket intre tudom konvertálni, de nem találtam.
Auth Gábor
Szerintem az Integer.parseInt megfelelő kell legyen.
Franz Max
okéoké ezt tudom, erre kényszerültem
arra gondoltam, hogy rá lehetne akaszkodni a preferenceactivity valami eseményére és magam tölteném be ill menteném el az adatokat. ilyenről tudsz?
Auth Gábor
Nem mélyedtem el ennyire... úgyhogy sajnos nincs ötletem.
Kővári László
Hello
Én azt csináltam, hogy a PreferenceActivity ből származtatott osztályom implementálja az OnSharedPreferenceChangeListener -t.
És az onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) fgv.ben úgy ahogy A.Gábor írta, int típussá alakítom pl így:
if (key.equals("egy_preference_key")) {
String prefValue = sharedPreferences.getString("egy_preference_key", "1");
int intErtek = Integer.parseInt(prefValue);
}