web-dev-qa-db-fra.com

Dynamic ListPreference dans android

Comment générer une liste de préférences dynamique dans Android? Je veux obtenir tous les points d'accès wifi et faire une liste en utilisant l'activité de préférence (c'est-à-dire faire une liste en utilisant listpreference). Comment faire ça?

44
kkk

Chaque élément XML dans Android peut être créé par programme car le nom de l'élément est également une classe Java. Par conséquent, vous pouvez créer un ListPreference dans le code:

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

Vous pouvez également le créer en XML, puis ajouter les entrées/valeurs d'entrée dans le code:

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);
27
Philio

Pour créer une préférence de liste dynamique, vous devez créer un activité de préférence (c'est-à-dire pour étendre une activité en tant que PreferenceActivity).

Le code suivant peut être utilisé pour créer la liste de manière dynamique.

 // Root 
 PreferenceScreen root = getPreferenceManager (). CreatePreferenceScreen (this); 
 DialogBasedPrefCat.setTitle ("Titre de catégorie"); 
 Root.addPreference (dialogBasedPrefCat ); // Ajout d'une catégorie 
 
 // Liste des préférences sous la catégorie 
 ListPreference listPref = new ListPreference (this); 
 ListPref.setKey ("keyName"); // Référence pour obtenir la valeur pref 
 ListPref.setEntries ("Tableau de valeurs"); 
 ListPref.setEntryValues ​​("Tableau de valeurs d'élément"); 
 ListPref.setDialogTitle ( "Titre de la boîte de dialogue"); 
 listPref.setTitle ("Title"); 
 listPref.setSummary ("Summary"); 
 dialogBasedPrefCat.addPreference (listPref); Ajout sous la catégorie 
 
 Return root; 
 

J'espère que cela aide à obtenir un! Dea ...

MODIFIER:

Créez et ajoutez des valeurs à CharSequence [] comme ceci:

CharSequence[] cs = new String[]{"myValue"};
26
Dijo David

Cette technique minimaliste est pour les deux environnements.

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

Dans PreferenceFragment.onCreate()

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

Autre part

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;
}

Remarques:
(a) XML est auto-documenté et peut-être un meilleur choix que la création dynamique de préférences.
(b) Démarrer votre PreferenceFragment en n'utilisant PAS PreferenceActivity vous permet facilement de faire ceci:

image

0
Bad Loser