множественная зависимость в checkboxpreference android или listpreference - PullRequest
5 голосов
/ 30 марта 2011

Например: у меня есть три флажка на моем экране предпочтений, и есть 3 различных listpreference(A,B,C) в зависимости от каждого флажка.Я хочу, чтобы пользователь выбрал только один флажок за раз.Как мне этого добиться?

  1. На экране настроек нет переключателя

  2. Я не могу использовать Listpreference, если могу его использовать

      ListPreference
        android:key="livewallpaper_testpattern"
        android:title="@string/livewallpaper_settings_title"
        android:summary="@string/livewallpaper_settings_summary"
        android:entries="@array/livewallpaper_testpattern_names"
        android:entryValues="@array/livewallpaper_testpattern_prefix"
    

Массив этого Listprefrence: «синий», «красный», «белый»

если это синий ListPreference A зависит от синего

если это красный ListPreference B зависит от красного

если это белый ListPreference C зависит от белого

Как я могу это сделать?

iискал 3-4 страницы в гугле и тут почти все об этом, но я не смог найти ответа.

С наилучшими пожеланиями,

Заранее спасибо ..

1 Ответ

14 голосов
/ 30 марта 2011

Вы можете переопределить onSharedPreferenceChanged в своем классе PreferenceActivity и программно включить / отключить соответствующие настройки:

public class MyPreferences extends PreferenceActivity implements OnSharedPreferenceChangeListener {
    ...
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        if (key.equals("livewallpaper_testpattern")) {
            if (/* check if livewallpaper_testpattern equals to blue */) {
                findPreference("ListPreferenceKey_A").setEnabled(true);
                findPreference("ListPreferenceKey_B").setEnabled(false);
                findPreference("ListPreferenceKey_C").setEnabled(false);
            } else if (/* check if livewallpaper_testpattern equals to red */) {
                // enable B, disable A & C
            } else if (/* check id livewallpaper_testpattern equals to white */) {
                // enable C, disable A & B
            }
        }
    }
...