2011-03-21 17 views
43

¿Cómo generar dynamic listPreference en android? Quiero obtener todos los puntos de acceso wifi y hacer una lista utilizando la Actividad de preferencia (es decir, hacer una lista usando la preferencia de la lista). ¿Cómo hacer esto?Dynamic ListPreference en android

+2

Teniendo en cuenta que los artículos serán dinámicas, no es suficiente para establecer los elementos de 'onCreate'. También necesita actualizar los valores cuando se hace clic en ListPreference: http://stackoverflow.com/questions/6474707/how-to-fill-listpreference-dynamically-when-onpreferenceclick-is-triggered/13828912#13828912 – ccpizza

Respuesta

26

Todos los elementos XML en Android se pueden crear mediante programación ya que el nombre del elemento también es una clase Java. Por lo tanto, se puede crear un ListPreference en código:

CharSequence[] entries = { "One", "Two", "Three" }; 
CharSequence[] entryValues = { "1", "2", "3" }; 
ListPreference lp = new ListPreference(this); 
lp.setEntries(entries); 
lp.setEntryValues(entryValues); 

Usted podría alternativamente crearlo en XML añada las entradas/valores de entrada en código:

CharSequence[] entries = { "One", "Two", "Three" }; 
CharSequence[] entryValues = { "1", "2", "3" }; 
ListPreference lp = (ListPreference)findPreference("list_key_as_defined_in_xml"); 
lp.setEntries(entries); 
lp.setEntryValues(entryValues); 
+8

findViewById funciona con puntos de vista. ListPreference no es una vista, por lo que el segundo ejemplo no parece funcionar. No se puede transmitir –

+0

findPreference debería funcionar en lugar de findViewById. Sin embargo, findPreference está en desuso en Honeycomb. –

26

Para crear una preferencia lista dinámica, u necesidad de crea un preference activity (es decir, para extender una actividad como PreferenceActivity).

El siguiente código se puede usar para crear la lista dinámicamente.

 
// Root 
     PreferenceScreen root = getPreferenceManager().createPreferenceScreen(this); 
     dialogBasedPrefCat.setTitle("Category Title"); 
     root.addPreference(dialogBasedPrefCat); //Adding a category 

// List preference under the category 
     ListPreference listPref = new ListPreference(this); 
     listPref.setKey("keyName"); //Refer to get the pref value 
     listPref.setEntries("Array of values"); 
     listPref.setEntryValues("Array of item value"); 
     listPref.setDialogTitle("Dialog Title"); 
     listPref.setTitle("Title"); 
     listPref.setSummary("Summary"); 
     dialogBasedPrefCat.addPreference(listPref); Adding under the category 

     return root; 

Espero que esto ayude a obtener una dea ...

EDITAR:

Crear y agregar valores a CharSequence como esto []:

CharSequence[] cs = new String[]{"myValue"}; 
+6

Vea este código de ejemplo para crear dinámicamente otros tipos de preferencias: http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/preference/PreferencesFromCode.html –

+0

Un poco extraño that getEntries y getEntryValues ​​son DOA, pero estoy seguro de que hay una buena razón. Y esta es una gran solución. – Malachi

+1

Boris - su enlace no funciona: simplemente me lleva al índice Descargar muestras.Sin embargo, seguí el camino indicado al pasar el mouse sobre su enlace en mis muestras descargadas y lo encontré. (Para cualquier otra persona: comience desde android-sdk \ samples \ android- \ ApiDemos luego siga el resto de la ruta de Boris) –

0

Esta minimalista la técnica es para ambos ambientes.

En preferences.xml

<!-- NB: Dynamic array insertion for 'entries'/'entryValues' --> 
<ListPreference 
    android:key="xyzzy" 
    android:title="..." 
    android:summary="..." 
    android:numeric="integer" 
    android:defaultValue="0" 
    android:layout="?PrefLayoutDtl" 
/> 

En PreferenceFragment.onCreate()

addPreferencesFromResource(R.xml.preferences); 
expand_xyzzy((ListPreference)findPreference("xyzzy")); 

otra parte

public static Preference expand_xyzzy (ListPreference pref) { 
    if (pref == null) return pref; 
    pref.setEntries(new String["one","two","three]; 
    pref.setEntryValues(new String["0","1","2"]); 
    return pref; 
} 

Notas:
(a) XML es auto-documentado y tal vez un Bette opción de elección que la creación de preferencia dinámica.
(b) A partir de su PreferenceFragment al no utilizar PreferenceActivity fácilmente le permite hacer esto:

image