2011-05-25 20 views
18

En mi página de configuración, tengo una preferencia que obtiene una lista de configuraciones intercambiables que quería mostrar como preferencias de casilla de verificación individuales.Completando las preferencias mediante programación con casillas de verificación

Sé que preferences.xml admite la generación de listas de preferencias (consulte la página de configuración de wi-fi), pero ListPreference solo le permite seleccionar uno de la lista.

He estado buscando cómo generar preferencias programáticamente pero solo he logrado encontrar cómo cambiar los atributos de las preferencias que ya están en el XML.

+2

Si solo necesita la lista de opciones múltiples, eche un vistazo a [MultiSelectListPreference] (http://developer.android.com/reference/android/preference/MultiSelectListPreference.html) – Jokahero

Respuesta

39

Aquí es un ejemplo corto (suponiendo que está extendiendo PreferenceActivity):

public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    PreferenceScreen screen = getPreferenceManager().createPreferenceScreen(this); 

    PreferenceCategory category = new PreferenceCategory(this); 
    category.setTitle("category name"); 

    screen.addPreference(category); 

    CheckBoxPreference checkBoxPref = new CheckBoxPreference(this); 
    checkBoxPref.setTitle("title"); 
    checkBoxPref.setSummary("summary"); 
    checkBoxPref.setChecked(true); 

    category.addPreference(checkBoxPref); 
    setPreferenceScreen(screen); 
} 
+0

¡Qué increíblemente fácil! ¡Gracias! :) – isep

+0

Me alegro de que esto haya sido útil :) – inazaruk

+2

Para que mi PreferenceFragment realmente use PreferenceScreen tuve que llamar 'setPreferenceScreen (screen);' también. – ndsc

1

añadir Programatically una preferencia, con otras preferencias en el archivo xml: Otras soluciones no funcionaron para mí porque yo también tenía una xml con preferencias No estoy seguro de que todas estas llamadas sean necesarias/redundantes, pero esto funciona.

onCreate() método, clase extiende PreferenceActivity:

setContentView(R.layout.preferences); 
addPreferencesFromResource(R.xml.preferences); 

PreferenceScreen pScreen = getPreferenceManager().createPreferenceScreen(this);  
CheckBoxPreference cb = new CheckBoxPreference(this); 
cb.setKey("cb"); 
cb.setTitle("BLAH"); 
cb.setOrder(99);  //not working... 
pScreen.addPreference(cb); 

setPreferenceScreen(pScreen); 
addPreferencesFromResource(R.xml.preferences); 

Nota al margen: Ya que necesitaba para generar una lista casilla de verificación dinámica, se el más adecuado dentro de un PREFERENCE interior. Así que creé esta PreferenceScreen dentro del xml, luego generé dinámicamente las casillas de verificación dentro de esto. De esta forma, el orden no importaba ya que todas las 'nuevas' dinámicas casillas estaban dentro de esta pantalla.

+0

mezcla de preferencias de xml y programáticamente es muy confuso. Todas las preferencias pueden crearse programáticamente y personalmente. Creo que el enfoque programático es mucho más conveniente que el método xml. – slinden77

Cuestiones relacionadas