Я создаю приложение, в котором мне нужно показать экран настроек, когда пользователь может проверить, какие элементы из каких категорий будут отображаться в списке основных действий.
Я разбираю 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
объект.
Моя проблема в том, что мне нужно хранить не только заголовок для одного флажка, но мне также нужно хранить идентификатор категории, но в объекте CheckBoxPreference
такого свойства нет.
Мой вопрос заключается в том, есть ли другой обходной путь или мне следует расширить класс CheckBoxPreference
и создать некоторый пользовательский MyCheckBoxPreference
, который также будет хранить другое «значение»?
Мое видение состоит в том, чтобы иметь что-то похожее (или то же самое), что и обычный флажок HTML - хотя он имеет значение, оно не установлено (отправлено), если флажок не установлен, а с другой стороны, когда установлен флажок, вы получаете конкретное значение вместо просто true/false ...
Насколько мне известно, CheckBoxPreference
имеет только проверенное/непроверенное состояние, в то время как значение, которое можно было бы вернуть, отсутствует.
Я думал о том, чтобы установить ключи предпочтений только на идентификатор конкретных категорий вместо category_<ID>
, а затем вызвать sharedPreferences.getAll()
- я ожидаю, что должны быть возвращены только проверенные CheckBoxPreferences
, а затем, получив их ключи, я должен иметь возможность работать с идентификаторами категорий ... Может ли это быть простым решением и хорошим подходом???
Большое спасибо за любой дельный совет!!!