【问题标题】:Dynamic ListPreference in androidandroid中的动态ListPreference
【发布时间】:2011-03-21 08:37:51
【问题描述】:

如何在android中生成动态listPreference? 我想获取所有 wifi 接入点并使用偏好 Activity 制作一个列表(即使用 listpreference 制作一个列表)。 如何做到这一点?

【问题讨论】:

标签: android android-preferences preference


【解决方案1】:

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

【讨论】:

  • findViewById 适用于视图。 ListPreference 不是视图,因此第二个示例似乎不起作用。无法投射。
  • findPreference 应该可以代替 findViewById。但是在 Honeycomb 中不推荐使用 findPreference。
【解决方案2】:

要创建动态列表首选项,您需要创建一个preference activity(即,将活动扩展为PreferenceActivity)。

以下代码可用于动态创建列表。

// 根 PreferenceScreen root = getPreferenceManager().createPreferenceScreen(this); dialogBasedPrefCat.setTitle("类别标题"); root.addPreference(dialogBasedPrefCat); //添加一个类别 // 列出类别下的偏好 ListPreference listPref = new ListPreference(this); listPref.setKey("keyName"); //参考获取pref值 listPref.setEntries("值数组"); listPref.setEntryValues("项目值数组"); listPref.setDialogTitle("对话框标题"); listPref.setTitle("标题"); listPref.setSummary("摘要"); dialogBasedPrefCat.addPreference(listPref);在类别下添加 返回根;

希望这有助于获得一个 !dea...

编辑:

像这样创建并向 CharSequence[] 添加值:

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

【讨论】:

  • 查看此示例代码以动态创建其他类型的首选项:developer.android.com/resources/samples/ApiDemos/src/com/…
  • getEntries 和 getEntryValues 是 DOA 有点奇怪,但我相信这是有充分理由的。这是一个很好的解决方案。
  • Boris - 您的链接无效:它只是将我带到下载示例索引。但是,当我将鼠标悬停在我下载的示例中的链接上时,我按照指示的路径找到了它。 (对于其他人:从 android-sdk\samples\android-\ApiDemos 开始,然后按照 Boris 的其余路径)
  • 示例路径:sdk\samples\android-21\legacy\ApiDemos\src\com\example\android\apis\preference
【解决方案3】:

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

在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) 通过不使用 PreferenceActivity 来启动您的 PreferenceFragment 很容易让您这样做:

【讨论】:

    猜你喜欢
    • 2011-09-02
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    • 2012-06-02
    • 1970-01-01
    • 2015-05-02
    • 1970-01-01
    相关资源
    最近更新 更多