Child pages
  • SharedPreferences i/o probléma
Skip to end of metadata
Go to start of metadata

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

      
      
Page viewed times
#trackbackRdf ($trackbackUtils.getContentIdentifier($page) $page.title $trackbackUtils.getPingUrl($page))
  • No labels

6 Comments

  1. 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.

    1. 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.

       

      1. Szerintem az Integer.parseInt megfelelő kell legyen.

        1. okéoké ezt tudom, erre kényszerültem (smile)

          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?

          1. Nem mélyedtem el ennyire... úgyhogy sajnos nincs ötletem.

  2. 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);
    }