Android - 如何为CheckBoxPreference设置值?要么?

时间:2011-04-19 21:10:51

标签: android android-preferences checkboxpreference

我正在构建一个应用程序,当我需要显示设置屏幕时,用户可以查看哪些项目将在主要活动的列表视图中显示。

我正在为这些类别解析XML,因此PreferenceScreen以编程方式完成,所有CheckBoxPreferences都在循环中构建。代码:

try {
    URL url = new URL("http://www.someurl.com/phone/categories.php");

    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    Document doc = db.parse(new InputSource(url.openStream()));
    doc.getDocumentElement().normalize();

    NodeList nodeList = doc.getElementsByTagName("category");

    for (int i = 0; i < nodeList.getLength(); i++) {                
        Element category = (Element)nodeList.item(i);

        Node id = category.getElementsByTagName("id").item(0);
        Node title = category.getElementsByTagName("name").item(0);

        CheckBoxPreference togglePref = new CheckBoxPreference(this);
        togglePref.setKey("category_" + id.getChildNodes().item(0).getNodeValue());
        togglePref.setDefaultValue(true);
        togglePref.setTitle(title.getChildNodes().item(0).getNodeValue());
        root.addPreference(togglePref);
    }
} catch(Exception ex) {
    Log.e(this.getClass().getSimpleName(), ex.getMessage());
}

其中rootPreferenceScreen对象。

我的问题是我不仅需要存储一个复选框选项的标题,而且我还需要存储该类别的ID,但CheckBoxPreference对象中没有这样的属性。

我的问题是,是否有其他解决方法,或者我应该扩展CheckBoxPreference课程并创建一些自定义MyCheckBoxPreference来存储另一个“价值”?

我的愿景是拥有与普通HTML复选框相似(或相同)的东西 - 虽然它没有设置(提交)的值,如果未选中复选框,另一方面选中复选框时获取具体值而不是仅仅真/假...

AFAIK CheckBoxPreference只有状态已选中/未选中状态,而没有可返回的值。

我在考虑将偏好键设置为具体cetagories的ID而不是category_<ID>,然后调用sharedPreferences.getAll() - 我希望只返回已检查的CheckBoxPreferences然后返回通过获取他们的密钥,我应该能够使用类别ID ...这可能是一个简单的解决方案和良好的方法???

非常感谢任何适当的建议!!!

1 个答案:

答案 0 :(得分:1)

  

我的问题是我不仅需要存储一个复选框选项的标题,而且我还需要存储该类别的ID,但CheckBoxPreference对象中没有这样的属性。

恕我直言,这就是关键所在。

  

我正在考虑将首选项键设置为具体cetagories的ID而不是category_然后调用sharedPreferences.getAll() - 我希望只返回已检查的CheckBoxPreferences,然后通过获取它们的键我应该是能够使用类别ID进行操作......这可能是一个简单的解决方案和良好的方法吗?

您将获得用户已触摸的所有CheckBoxPreference个对象,无论是已选中还是未选中。这可能是正确的方法。