我正在构建一个应用程序,当我需要显示设置屏幕时,用户可以查看哪些项目将在主要活动的列表视图中显示。
我正在为这些类别解析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复选框相似(或相同)的东西 - 虽然它没有设置(提交)的值,如果未选中复选框,另一方面选中复选框时获取具体值而不是仅仅真/假...
AFAIK CheckBoxPreference
只有状态已选中/未选中状态,而没有可返回的值。
我在考虑将偏好键设置为具体cetagories的ID而不是category_<ID>
,然后调用sharedPreferences.getAll()
- 我希望只返回已检查的CheckBoxPreferences
然后返回通过获取他们的密钥,我应该能够使用类别ID ...这可能是一个简单的解决方案和良好的方法???
非常感谢任何适当的建议!!!
答案 0 :(得分:1)
我的问题是我不仅需要存储一个复选框选项的标题,而且我还需要存储该类别的ID,但CheckBoxPreference对象中没有这样的属性。
恕我直言,这就是关键所在。
我正在考虑将首选项键设置为具体cetagories的ID而不是category_然后调用sharedPreferences.getAll() - 我希望只返回已检查的CheckBoxPreferences,然后通过获取它们的键我应该是能够使用类别ID进行操作......这可能是一个简单的解决方案和良好的方法吗?
您将获得用户已触摸的所有CheckBoxPreference
个对象,无论是已选中还是未选中。这可能是正确的方法。