如何在Android中使用Java代码编辑ListPreference的值

3
我知道如何更改CheckBoxPreference的值,但我无法将其应用于ListPreference
以下是我的首选项屏幕构建方式:
  • 一个用于默认值的CheckBox
  • 一个用于选择除默认颜色以外其他颜色的ListPreference
ListPreference的键名为"titleColor",定义如下:
CharSequence[] entries = { "Dark grey", "Light grey", "Light red", "Red" };
CharSequence[] entryValues = { "#4c4c4c", "#b5b5b5", "#ab6a68", "#962622" };
final ListPreference color = (ListPreference) findPreference("titleColor");
color.setEntries(entries);
color.setEntryValues(entryValues);

现在,当我选择一种颜色时,我会这样做:
color.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
        public boolean onPreferenceChange(Preference preference, Object newValue) {
            System.out.println("In the onClick method");
            System.out.println("change title color");
            Editor editor2 = defaultColor.getEditor();
            editor2.putBoolean("defaultColor", false);
            editor2.commit();
            return true;
        }

    });

这似乎可以工作,但我不确定是否正确。

现在,当我选择默认颜色时,我一直在尝试做类似的事情,但我无法使列表取消所有选项或选中一个默认颜色。

有什么想法吗?


据我所知,ListPreference 的工作方式类似于字符串值。 - Pentium10
1个回答

6
CheckBox的情况下:
如果您有一个默认颜色的CheckBox,可以使用android:dependency来固定它,但是由于您没有它,我想这是唯一的方法。
ListPreference相关的内容相当类似:
ListPreference lp = (ListPreference)findPreference("listPreference_key");
lp.setValue("");

您可以查看 文档 了解可用的方法。

我添加了我的ListPreference的定义,因为我尝试了你的代码,虽然它可以工作并且我没有在列表中选择任何内容,但我尝试传递“Red”而不是“”,仍然没有选择... 我在提问之前确实阅读了文档,但我没有找到我所问的问题... - Sephy
2
@Sephy:记住你必须传递一个条目(entry),而不是一个条目值(entryValue)。 - Macarse
好的,我的错。我做错了。我试图通过条目名称获取颜色(这对我来说似乎是逻辑正确的方式,但显然不是)。我必须给它值,然后列表会为我检查正确的元素。lp.setValue("#962622")可以获得红色。不过我会留下空字符串。感谢你的帮助,Macarse。 - Sephy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接