0

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

我正在为这些类别解析一个 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());
}

root对象在哪里PreferenceScreen

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

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

我的愿景是具有与常见的HTML复选框相似(或相同)的东西 - 如果未检查复选框,则没有设置该值(已提交),另一方面,当检查时,您可以获得具体值,而不是仅仅/false/false ...

AFAIKCheckBoxPreference只有状态已检查/未检查,而没有可以返回的值。

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

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

4

1 回答 1

1

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

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

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

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

于 2011-04-19T22:02:34.613 回答