Динамический список предпочтений в Android - PullRequest
44 голосов
/ 21 марта 2011

Как создать динамический список предпочтений в Android?Я хочу, чтобы получить все точки доступа Wi-Fi и составить список, используя предпочтения Activity (т.е. создать список, используя listpreference).Как это сделать?

Ответы [ 3 ]

27 голосов
/ 21 марта 2011

Каждый элемент XML в Android может быть создан программно, поскольку имя элемента также является классом Java.Следовательно, вы можете создать ListPreference в коде:

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

Вы можете альтернативно создать его в XML, а затем добавить записи / значения записей в коде:

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);
26 голосов
/ 21 марта 2011

Для создания предпочтения динамического списка вам нужно создать действие предпочтения (т.е. расширить действие как PreferenceActivity).

Следующий код может использоваться для динамического создания списка.

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

Надеюсь, это поможет получить! Dea ...

EDIT:

Создать и добавить значения в CharSequence [] следующим образом:

CharSequence[] cs = new String[]{"myValue"};
0 голосов
/ 04 сентября 2017

Эта минималистичная техника предназначена для обеих сред.

В настройках.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" 
/>

В PreferenceFragment.onCreate()

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

В другом месте

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

Примечания:
(a) XML самодокументируется и, возможно, является лучшим выбором, чем создание динамических предпочтений.
(b) Если вы начнете PreferenceFragment, НЕ используя PreferenceActivity, вы легко сможете сделать это:

image

...