2010-04-24 8 views
18

È possibile definire un ListPreference in Xml e recuperare il valore da SharedPreferences utilizzando getInt? Qui è la mia Xml:Come ottenere un ListPreference Android definito in Xml i cui valori sono numeri interi?

<ListPreference android:key="@string/prefGestureAccuracyKey" 
    android:title="@string/prefGestureAccuracyTitle" android:summary="@string/prefGestureAccuracyDesc" 
    android:entries="@array/prefNumberAccuracyLabels" android:entryValues="@array/prefNumberAccuracyValues" 
    android:dialogTitle="@string/prefGestureAccuracyDialog" 
    android:persistent="true" android:defaultValue="2" 
    android:shouldDisableView="false" /> 

E voglio ottenere il valore con qualcosa di simile: int val = sharedPrefs.getInt (chiave, defaultValue).

Al momento devo usare getString e analizzare il risultato.

+0

che dovrebbe funzionare secondo il manuale http://developer.android.com/intl/de/reference/android/content/SharedPreferences.html – Pentium10

+0

I don' t ottieni la tua domanda. Quale valore sei disposto ad ottenere? – Macarse

+0

Bene che l'Xml crea una preferenza il cui tipo è String not Integer. Vorrei una preferenza il cui valore è fortemente digitato come int.Questa domanda è nata da una precedente che ho scritto e spiega il contesto: http://stackoverflow.com/questions/2705091/how-do-i-cast-from-int-to-generic-type-integer –

risposta

39

La mia comprensione è che ListPreference può funzionare solo con matrici di stringhe. Dovrai usare getString() e convertire te stesso in intero. Vedi http://code.google.com/p/android/issues/detail?id=2096 per il bug report su questo. Non sembra che Google abbia intenzione di estendere ListPreference per gestire tutto tranne le stringhe.

Inoltre: è necessario memorizzare anche le preferenze come stringa. In caso contrario, l'attività delle preferenze si arresta in modo anomalo all'avvio e tenta di leggere un valore stringa.

+0

Grazie. Non mi ero imbattuto in quel bug report. –

6

Ho fatto questo in un modo un po 'più estremo.

Ho utilizzato ListPreference e ho creato l'array entryValues ​​contenente stringhe che posso convertire in intero con Integer.parseInt().

Quindi nella mia PreferencesActivity, ho impostato un OnPreferenceChangeListener per questa preferenza, e nel metodo onPreferenceChange() ho impostato una preferenza diversa per la versione intera - questa seconda è quella che effettivamente uso nel mio codice. Il primo è lì solo per l'opzione utente.

In questo modo non devo convertire una stringa in int ogni volta che ho bisogno di guardarlo, lo faccio solo quando l'utente lo imposta. Forse eccessivo, ma funziona :)

0

È necessario creare una risorsa xml e impostare il valore predefinito su quello. Tutto ciò che inserisci nel file XML come letterale viene trattato come una stringa, pertanto il parametro ListPreference genererà un'eccezione di puntatore nullo quando tenta di trovare una stringa in un array intero.

0

Ma per me, per prima cosa ottieni un tipo di stringa: String numStr = prefs.getString ("chiave", "-555"); poi: `

try { 
    int yourInt = Integer.parseInt(numStr); 
    if(yourInt != -555) 
    { 
     //do your stuff 
    } 
} 
catch(Exception e) 
{ 
    ... 
} 

`

Problemi correlati