Android - Как установить значение для CheckBoxPreference? Или же? - PullRequest
0 голосов
/ 20 апреля 2011

Я создаю приложение, в котором мне нужно показать экран настроек, когда пользователь может проверить, какие элементы, из каких категорий будут отображаться в просмотре списка основной деятельности.

Я анализирую 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-флажок, - хотя у него есть значение, оно не устанавливается (отправляется), если флажок не установлен, и, с другой стороны, когда установлен флажок, вместо простого истина / ложь ...

AFAIK CheckBoxPreference имеет только состояние проверено / не отмечено, в то время как никакое значение не может быть возвращено.

Я думал о том, чтобы установить ключи предпочтения только для идентификатора конкретных кетагорий вместо category_<ID>, а затем вызвать sharedPreferences.getAll() - я ожидаю, что должен быть возвращен только проверенный CheckBoxPreferences, а затем, получив их ключи, я должен иметь возможность работать с идентификаторами категорий ... Может ли это быть простым решением и хорошим подходом ???

Большое спасибо за любые правильные советы !!!

1 Ответ

1 голос
/ 20 апреля 2011

Моя проблема заключается в том, что мне нужно хранить не только заголовок для одной опции флажка, но мне также нужно хранить идентификатор категории, но в объекте CheckBoxPreference такого свойства нет.

ИМХО, вот для чего ключ.

Я думал о том, чтобы ключи предпочтения были установлены только для идентификатора конкретных cetagories вместо category_, а затем вызывал sharedPreferences.getAll () - я ожидаю, что должны быть возвращены только проверенные CheckBoxPreferences, а затем после получения их ключей возможность работать с идентификаторами категорий ... Может ли это быть простым решением и хорошим подходом ???

Вы получите все CheckBoxPreference объекты, которые были затронуты пользователем, независимо от того, отмечены они или нет. Это, вероятно, правильный подход.

...