2011-03-04 18 views
36

necesito establecer el valor de defup para un ListPreference cuando se inicia la actividad. Lo he intentado con ListPreference.setDefaultvalue("value"); pero es la primera entrada de la lista por defecto. Lo necesito porque debo verificar una condición y establecer como predeterminado el valor que satisface esa condición, así que creo que no se puede hacer desde el archivo xml (con android:defaultValue)Cómo establecer el valor predeterminado de un ListPreference

Por ejemplo, supongamos que tengo esta matriz de valores en el arrays.xml:

<string-array name="opts"> 
    <item>red</item> 
    <item>green</item> 
    <item>blue</item> 
</string-array> 

<string-array name="opts_values"> 
    <item>1</item> 
    <item>2</item> 
    <item>3</item> 
</string-array> 

en el XML PREFERENCE:

<ListPreference 
    android:title="Colour select" 
    android:summary="Select your favourite" 
    android:key="colour" 
    android:entries="@array/opts" 
    android:entryValues="@array/opts_values" /> 

en la actividad que me gustaría hacer algo como esto:

String mycolour; 
if (something) { 
    mycolour="1"; 
} else { 
    mycolour="2"; 
} 
ListPreference colour = (ListPreference) findPreference ("colour"); 
colour.setDefaultValue(mycolour); 

Pero no funciona, porque es la primera opción por defecto. ¿Podría explicarme cómo hacer que otro sea el predeterminado? Gracias.

Respuesta

27

¿Has probado:

setValueIndex(int index); 
+35

No estoy seguro de que esta sea la solución correcta, ya que setValue o setValueIndex establecerá efectivamente el valor, incluso si el usuario ya ha proporcionado un valor personalizado que está almacenado en las preferencias. Lo que funciona para mí es 'if (colour.getValue() == null) { colour.setValue (mycolour); } ' – mtotschnig

+0

y ¿qué es' int index'? ¿Qué pasa si quiero establecer una cadena definida? –

+0

¿Cómo recupero el último valor almacenado en el almacenamiento persistente para una preferencia configurada para el almacenamiento persistente? –

3

o también puede probar colour.setValue(mycolour);

85

No es necesario para manejar programáticamente el valor predeterminado de ListPreferences. Puedes hacer esto en el archivo de configuración xml. A continuación se muestra un ejemplo

<string-array name="opts"> 
     <item>red</item> 
     <item>green</item> 
     <item>blue</item> 
    </string-array> 

    <string-array name="opts_values"> 
     <item>1</item> 
     <item>2</item> 
     <item>3</item> 
    </string-array> 


<ListPreference 
        android:title="Colour select" 
        android:summary="Select your favourite" 
        android:key="colour" 
        android:entries="@array/opts" 
        android:entryValues="@array/opts_values" 
        android:defaultValue="2" /> 

aquí i seleccionado 2 como un valor por defecto. Recuerde defaultvalue será elemento opts_values.

+2

¿Qué pasa si opts_values ​​es una matriz de enteros? ¿O es esa una mala idea? – Keith

+2

Este método no funciona para mí. –

+1

Funciona como un encanto. – WideFide

3

Sólo para que conste si alguien más tiene este problema:

setValueIndex(int X) es fijar el valor del índice @ X al valor por defecto - por lo es probablemente lo que busca.

Establezca este valor ¡Después de ha agregado los valores! (error estúpido, pero me llevó media hora)

5

Lo siento mi mal inglés.

  1. elemento de la lista
  2. recuperar la lista Comprobar si el valor es nulo. Si es nulo configurado en el valor predeterminado.

Código:

ListPreference dataPref = (ListPreference) findPreference("keyList"); 

if(dataPref.getValue() == null){ 
    dataPref.setValueIndex(0); //set to index of your deafult value 
} 
2
((ListPreference) findPreference("pref_language")).setValue(Locale 
       .getDefault().getLanguage()); 

setValue() es el método de ListPreference y setDefaultvalue es el método de preferencia

0

En realidad se debe a que los SharedPreferences persistirán después de volver a construir la aplicación. Desinstalar e intentar de nuevo.

1

Ésta es una entrada antigua, pero aquí es otra manera de establecer el valor predeterminado para ListPreference con la siguiente línea de código:

PreferenceManager.setDefaultValues(getActivity(), R.xml.preferences, false); 
1

usted puede configurar su valor predeterminado mediante el uso de la clave como esto

<string-array name="syncFrequency"> 
    <item name="1">Block All Calls</item> 
    <item name="2">Block Black List</item> 
    <item name="3">Block Unknown Calls</item> 
    <item name="4">Allow White List</item> 
    <item name="5">Receive All Calls</item> 
</string-array> 




<string-array name="syncFrequencyValues"> 
    <item name="1">Block_All_Calls</item> 
    <item name="2">Block_Black_List</item> 
    <item name="3">Block_Unknown_Calls</item> 
    <item name="4">Allow_White_List</item> 
    <item name="5">Receive_All_Calls</item> 
</string-array> 



    <ListPreference 
     android:key="prefSyncFrequency" 
     android:entries="@array/syncFrequency" 
     android:summary="%s" 
     android:defaultValue="Block_Black_List" 
     android:entryValues="@array/syncFrequencyValues" 
     android:title="@string/call_block_options" /> 
Cuestiones relacionadas