Android CheckBoxPreference: как отключить и включить другие настройки при изменении настроек - PullRequest
12 голосов
/ 13 октября 2011

У меня есть CheckBoxPreference и еще 2: один - Редактировать тестовый преф. а другой - ListBox Pref. Как я могу включить список параметров pref и отключить редактировать текст pref. когда CheckBoxPreference включен?

Ответы [ 4 ]

33 голосов
/ 13 октября 2011

Кажется, это дубликат этого вопроса

Вы можете переопределить public void onSharedPreferenceChanged(final SharedPreferences sharedPreferences, final String key), и когда он вызывается с помощью key.equals(<Your key for setting>), сделайте что-то вроде:

boolean isEnabled = sharedPreferences.getBoolean(key, true);
getPreferenceScreen().findPreference("list box preference key").setEnabled(isEnabled);
getPreferenceScreen().findPreference("list box preference key").setEnabled(!isEnabled);

Кроме того, сделайте то же самое в onCreate(), чтобы правильно настроить первоначальные настройки экрана ваших настроек.

32 голосов
/ 17 марта 2016

Как вариант, можно поместить «зависимость» в ListBoxPref.

<PreferenceCategory
android:key="key1"
android:title="@string/title1">
<SwitchPreference
    android:key="parents"
    android:summaryOff="@string/do_smthng"
    android:summaryOn="@string/do_smthng"
    android:switchTextOff="@string/i_am_sleeping"
    android:switchTextOn="@string/i_have_free_time" />
<CheckBoxPreference
    android:key="baby"
    android:dependency="parents"
    android:title="@string/basic_habbits"
    android:summaryOff="@string/play_with_parents"
    android:summaryOn="@string/play_with_parents"
    android:defaultValue="true" />
</PreferenceCategory>

По сути, ребенок не может играть с родителями, когда они спят =)

3 голосов
/ 17 января 2014

Вы можете получить значение флажка. И затем, чтобы включить / отключить настройки, вы можете использовать pref.setEnabled(false);. Чтобы включить, просто используйте ту же функцию и введите истинное значение.

0 голосов
/ 28 июня 2018

Просто чтобы упростить ответ от Серхио,

  android:dependency="keyOfParent"

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

Также добавление слушателя в onSharedPreferenceChangedработает, иногда .. иногда работает не так, как хотелось бы (не уверен почему)

Добавить

public class YourClass extends Whatever implements SharedPreferences.OnSharedPreferenceChangeListener

Затем после OnCreate ()

@Override
public void onSharedPreferenceChanged (SharedPreferences p1, String p2)
     {      
     if (Your Arguments)
      {
        // getPreferenceScreen().findPreference("pref_key").setEnabled(false);
      }
     }
...