Удалить элемент массива из ListPreference - PullRequest
3 голосов
/ 26 апреля 2011

У меня есть список предпочтений для режима акселерометра в моей активности предпочтений, который я загружаю исключительно из xml. Если пользовательское устройство не имеет или не поддерживает акселерометр, я не буду полностью удалять элемент в массиве. Нужно ли создавать отдельный список предпочтений для этого варианта, чтобы удалить его? (Я бы предпочел хранить их всех в одном.) Как это можно удалить с помощью приведенной ниже настройки?

Спасибо за совет.

Jason

<string-array name="mode_text">
        <item>Others Modes</item>
        <item>Others Modes</item>
        <item>Accelerometer Mode</item>
    </string-array>
    <string-array name="mode_values">
        <item>0</item>
        <item>1</item>
        <item>2</item>
    </string-array>
</resources>

1 Ответ

4 голосов
/ 26 апреля 2011

Когда вы говорите, что хотите «полностью удалить элемент в массиве», вы имеете в виду, что хотите, чтобы ListPreference не отображался на PreferenceScreen? Или вы хотите, чтобы он возвращал нулевое значение при попытке получить заданное значение?

Хорошо, теперь я понимаю. Я думаю, что вы не можете удалить только этот элемент в массиве. Вы должны установить новые массивы для записей и entryValues ​​для вашего ListPreference, программно. Вы найдете ListPreference по его ключу.

Вот пример:

    if (accelerometerNotSupported) {
        ListPreference accelMode = (ListPreference) findPreference("acceleratorMode");
        accelMode.setEntries(new String[]{"Others Modes","Others Modes"});
        accelMode.setEntryValues(new String[]{"0", "1"});
    }

Это изменит ваш список предпочтений, чтобы иметь только эти две опции.

...