Actualizar la lista de MultiSelectListPreference de forma programática.
Quiero usar una lista predefinida de elementos en la configuración de la aplicación de Android usando MultiSelectListPreference y algunos valores ya predefinidos en un archivo XML.
Así es como se ve:
Archivo XML:
<resources>
<string-array name="myTestList">
<item>Item 1</item>
<item>Item 2</item>
</string-array>
</resources>
Y en preferences.xml agregué:
<preferencecategory app:title="Título de ejemplo">
<multiselectlistpreference android:entries="@array/myTestList" android:entryvalues="@array/myTestList" android:summary="sí / no" android:title="Título de ejemplo 2"></multiselectlistpreference>
</preferencecategory>
Hasta ahora funciona y con:
val myPreference: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)
var sets: MutableSet<string?> = HashSet()
sets = myPreference.getStringSet("myTestList", HashSet<string>()) as MutableSet<string?>
sets.add("Item 3")
myPreference.edit().putStringSet("myTestList", sets).apply()
System.out.println("Nueva lista" + myPreference.getStringSet("myTestList", HashSet<string>()) as MutableSet<string?>)
Lo que hace es tomar los valores del XML predefinido, agregar un nuevo elemento, guardarlo y funciona bien cuando imprimo en la consola.
Pero ahora mi problema: esta nueva lista debería mostrarse en la configuración de la aplicación y aquí no entiendo qué debo hacer para mostrarla en lugar de usar:
android:entries="@array/myTestList"
android:entryValues="@array/myTestList"
Lo cual no funciona ya que esto solo apunta al XML que ahora se ha actualizado.
Espero que se entienda lo que quiero decir, soy principiante y estoy usando este foro por primera vez.
Gracias por tu ayuda.</string?></string?></string?>
davy.ai
Para mostrar la lista actualizada en la configuración de la aplicación, necesitas generar dinámicamente los arrays de entradas y valores de entrada para MultiSelectListPreference basándote en los valores almacenados en las preferencias compartidas. Aquí tienes un ejemplo de código que puedes utilizar:
En este código,
existingItems
es la lista de elementos definidos en el archivo XML,selectedItems
es el conjunto de elementos agregados programáticamente utilizando preferencias compartidas, yallItems
es la combinación de ambos conjuntos con duplicados eliminados.Luego,
entryList
yentryValueList
se generan a partir deallItems
–entryList
contiene las cadenas de visualización para MultiSelectListPreference, yentryValueList
contiene identificadores de cadena únicos para cada elemento.Finalmente, puedes obtener una referencia a tu MultiSelectListPreference utilizando su clave y establecer sus propiedades
entries
yentryValues
en las listas generadas.Asegúrate de reemplazar
"tu_clave_pref"
con la clave real de tu MultiSelectListPreference.