java android android-preferences preference listpreference

java - Cómo establecer el valor predeterminado de un ListPreference



android android-preferences (9)

En realidad, es porque las Preferencias Compartidas persistirán después de que vuelvas a compilar la aplicación. Desinstalarlo e intentar de nuevo.

Necesito establecer el valor de desfragmentación para una ListPreference cuando comience la actividad. Lo he intentado con ListPreference.setDefaultvalue("value"); pero hace que la primera entrada de la lista sea por defecto. Lo necesito porque debo verificar una condición y establecer como valor predeterminado el valor que satisface esa condición, por lo que creo que no se puede hacer desde el archivo xml (con android:defaultValue )

Por ejemplo, supongamos que tengo esta matriz de valores en 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 PreferenceScreen xml:

<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, 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 hace que la primera opción sea la predeterminada. ¿Podría explicarme cómo hacer que otro sea el predeterminado? Gracias.


Esta es una publicación anterior, pero esta es otra forma de establecer el valor predeterminado para ListPreference con la siguiente línea de código:

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


Has probado:

setValueIndex(int index);


No necesita manejar programáticamente el valor predeterminado de ListPreferences . Puedes hacer esto en el archivo de configuración xml. A continuación hay 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í seleccioné 2 como valor predeterminado. Recuerde que el valor defaultvalue será el elemento opts_values .


Perdón mi Inglés es malo.

  1. Artículo de lista
  2. Recuperar la lista Verificar 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 }


Puede establecer su valor predeterminado usando la clave como esta

<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" />


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


Solo para el registro si alguien más tiene este problema:

setValueIndex(int X) está estableciendo el valor @ index X en el valor predeterminado, por lo que es probablemente lo que está buscando .

¡Establezca este valor DESPUÉS de haber agregado los valores! (error estúpido, pero me llevó media hora)


((ListPreference) findPreference("pref_language")).setValue(Locale .getDefault().getLanguage());

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