Domanda

E 'possibile definire una ListPreference in XML e recuperare il valore da SharedPreferences utilizzando getInt? Ecco la mia Xml:

<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 come:. Int val = sharedPrefs.getInt (chiave, defaultValue)

Al momento devo usare getString e analizzare il risultato.

È stato utile?

Soluzione

La mia comprensione è che ListPreference può lavorare solo con gli array di stringhe. Dovrete usare getString () e convertire in numero intero da soli. Vedere http://code.google.com/p/android/issues / dettagli? id = 2096 per la segnalazione di bug su questo. E non sembra che Google prevede di estendere ListPreference per gestire qualsiasi cosa, ma le stringhe.

Inoltre: è necessario memorizzare la preferenza come una stringa troppo. In caso contrario, la vostra attività preferenze andrà in crash quando si avvia e cerca di leggere un valore stringa.

Altri suggerimenti

L'ho fatto in maniera poco più estremo.

ho usato il ListPreference e ha reso la mia serie entryValues ??contengono stringhe che posso convertire in intero con Integer.parseInt ().

Poi, nel mio setup PreferencesActivity, ho un OnPreferenceChangeListener per questa preferenza, e nel metodo onPreferenceChange () ho impostato una preferenza diversa alla versione intero - questa seconda è quella che in realtà uso nel mio codice. La prima c'è solo per l'opzione utente.

In questo modo non devo convertire una stringa a int ogni volta che ho bisogno di vedere le cose, mi basta farlo quando l'utente imposta IT. Forse eccessivo, ma funziona:)

In realtà, come si può leggere nella documentazione:

  

http://developer.android.com/reference/ Android / preferenza / ListPreference.html # getValue ()

Il metodo per ottenere un valore ListPreference è:

public String getValue ()

Così si ottiene una stringa. Non è un grosso problema, ma potrebbe essere più bella di ammettere interi.

È necessario creare una risorsa xml e impostare il valore di default per questo. Tutto ciò si inserisce nel file XML come un letterale viene trattato come una stringa, in modo che il ListPreference sarà un'eccezione puntatore nullo quando si cerca di trovare una stringa in una matrice intera.

Ma per me, per la prima volta ottiene un tipo stringa da: String = numStr prefs.getString ( "chiave", "-555"); poi: `

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

`

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top