android中的动态ListPreference

时间:2011-03-21 08:37:52

标签: android android-preferences preference

如何在android中生成动态listPreference? 我想得到所有的wifi接入点并使用优先活动制作一个列表(即使用listpreference制作一个列表)。 怎么做?

3 个答案:

答案 0 :(得分:27)

Android中的每个XML元素都可以通过编程方式创建,因为元素名称也是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);

答案 1 :(得分:26)

要创建动态列表首选项,您需要创建preference activity(即将活动扩展为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 ...

修改

为CharSequence []创建和添加值,如下所示:

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

答案 2 :(得分:0)

这种极简主义技术适用于两种环境。

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

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