2011-09-08 6 views
10

Intenté establecer el valor predeterminado para una ListPreference pero no aparece nada.El valor predeterminado de ListPreference no aparece

¿Puedes verificar mi código en busca de algún error?

Gracias.

En verdad, Emad

Esto es en el settings.xml:

<PreferenceCategory android:title="Media:"> 
    <CheckBoxPreference android:key="ChimeWhenMusicIsPlaying" 
     android:title="@string/ChimeWhenMusicIsPlayingTitle" android:summary="@string/ChimeWhenMusicIsPlayingSummary" 
     android:defaultValue="false" /> 

    <ListPreference android:title="Chime Volume" 
     android:key="ChimeVolume" android:summary="Select volume for the chiming sound." 
     android:entries="@array/chimeVolumeLabels" android:entryValues="@array/chimeVolumeValues" 
     android:defaultValue="1" /> 

</PreferenceCategory> 

Esto está en el archivo de matrices:

<resources> 

    <string-array name="chimeVolumeLabels"> 
    <item>Default</item> 
    <item>Soft</item> 
    <item>Medium</item> 
    <item>Loud</item> 
    </string-array> 

    <string-array name="chimeVolumeValues"> 
    <item>1</item> 
    <item>2</item> 
    <item>3</item> 
    <item>4</item> 
    </string-array> 
</resources> 

Respuesta

27

Encontré que a veces tengo que borrar los datos de la aplicación. Desinstala y reinstala la aplicación. Después de eso, todo funciona como se esperaba.

+0

ahorraste horas de mi vida. – akashr

+0

comportamiento extraño, gracias – speedDeveloper

+1

Esto puede deberse al hecho de que Android establecerá los valores predeterminados solo ** una vez ** - ver [esto] (https://developer.android.com/reference/android/preference/PreferenceManager .html # setDefaultValues ​​(android.content.Context,% 20int,% 20boolean)) –

10

me encontré con que tengo que llamar PreferenceManager .setDefaultValues ​​() en mi Actividad de Preferencias para que mi valor predeterminado aparezca inicialmente.

public class PreferencesActivity extends PreferenceActivity { 

    @Override 
    protected void onCreate (Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // This static call will reset default values only on the first ever read 
     PreferenceManager.setDefaultValues(getBaseContext(), R.xml.settings, false); 

     addPreferencesFromResource(R.xml.settings); 
    } 
} 
+2

+1 para esta respuesta. Hasta que se invoca la actividad de preferencias por primera vez después de la instalación de la aplicación, la llamada a * sharedPreferences.getString (key, null) * devolverá null incluso si el atributo * android: defaultValue * está establecido en xml. Si los valores de las preferencias predeterminadas deben estar disponibles antes de invocar la actividad de preferencias en la aplicación por primera vez, la llamada de PreferenceManager.setDefaultValues ​​() es una gran solución. – pavel

Cuestiones relacionadas