Как сделать противоположность атрибута предпочтения android: зависимость?

Есть ли атрибут XML, который делает полную противоположность android:dependency ?

Я хотел бы, чтобы зависимое предпочтение было включено, когда другое НЕ проверено и отключено, когда оно проверено.

Редактирование: возможно, проблема не в android:dependency возможно, есть xml-атрибут, который я могу добавить, чтобы сделать умолчание для этой настройки отключено, а затем android:dependency переключит его на противоположный способ, как я хочу.

Снова отредактируйте: я пробовал настройку android:enabled="false" в предпочтении, и он отключает его, как я хочу, но даже если он зависит от другого предпочтения, он не включал его, как я надеялся

Фактически я нашел это самостоятельно и решил, что я просто разместил его здесь, чтобы помочь любому, у кого может быть такая же проблема:

 android:disableDependentsState="true" 

Положите это на контрольные предпочтения.

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

Используйте описанный выше метод, чтобы установить все зависимые предпочтения одного типа (которые когда-либо имеют большее число). Затем (с классом, реализующим OnSharedPreferenceChangeListener) есть код, подобный этому в разделе «Предпочтение» и / или «Фрагмент предпочтения»:

 @Override public void onResume() { super.onResume(); sharedPreferences.registerOnSharedPreferenceChangeListener(this); } @Override public void onPause() { super.onPause(); sharedPreferences.unregisterOnSharedPreferenceChangeListener(this); } public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { if (key.equals("pref_that_they_depend-upon") { // Iterate over the preferences that need to be enabled or disabled, // lets say there is just one called the_awkward_one. Preference preference = findPreference("the_awkward_one"); // Or preference.setEnabled(! sharedPreferences.getBoolean(("pref_that_they_depend-upon", defaultValue)); preference.setEnabled(sharedPreferences.getBoolean(("pref_that_they_depend-upon", defaultValue)); } } 

Это мой пример кода для этого кода, а не XML.

  String eitherKey = "either"; String orKey = "or"; CheckBoxPreference either = new CheckBoxPreference(this); either.setKey(eitherKey); either.setTitle("Either"); either.setSummary("It is either one or"); either.setDefaultValue(false); either.setDisableDependentsState(true); inlinePrefCat.addPreference(either); try { //Crossfade Time CheckBoxPreference or = new CheckBoxPreference(this); or.setKey(orKey); or.setTitle("Or"); or.setSummary("the other"); inlinePrefCat.addPreference(or); or.setDependency(eitherKey); } catch (Exception e) { } 

Мне нужно изменить значение зависимого предпочтения, поэтому я отправляю свой код ниже, если кто-то хочет это сделать:

 @Override public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) { if(preference.getKey().equals("key_a")) { ((CheckBoxPreference)findPreference("key_b").setChecked(false); } return super.onPreferenceTreeClick(preferenceScreen, preference); } 

Внесите свой PreferenceActivity implement

SharedPreferences.OnSharedPreferenceChangeListener

Объявить в PreferenceActivity :

SharedPreferences prefs;

Инициализировать в onCreate :

SharedPreferences sPrefs = PreferenceManager.getDefaultSharedPreferences(this); prefs = sPrefs;

И регистрироваться на общем прослушивателе изменений предпочтений

 prefs.registerOnSharedPreferenceChangeListener(this); 

onResume то же, что и Стив, в onResume и onPause .

Реализация прослушивателя onSharedPreferenceChanged :

 @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { Log.d("SettingsActivity","onSharedPreferenceChanged LISTENER FIRED"); if (key.equals(getString(R.string.key_call))) { //if call true if (sharedPreferences.getBoolean(getString(R.string.key_call), false)) { Preference preference = findPreference(getString(R.string.key_record)); preference.setEnabled(false); } else { // if call false Preference preference = findPreference(getString(R.string.key_record)); preference.setEnabled(true); } } if (key.equals(getString(R.string.key_record))) { //if record true if (sharedPreferences.getBoolean(getString(R.string.key_record), false)) { Preference preference = findPreference(getString(R.string.key_call)); preference.setEnabled(false); } else { // if record false Preference preference = findPreference(getString(R.string.key_call)); preference.setEnabled(true); } } } 

В этом случае у меня есть две взаимоисключающие настройки в PreferenceActivity . Вызов и запись. Если оба флажка сняты, оба могут быть проверены, но когда пользователь проверяет один из них, другой становится отключенным (greyed out). Когда пользователь отменяет выбранное предпочтение, пользователь может проверить другой.

На обоих из них могут зависеть другие предпочтения, которые могут быть разработаны с помощью атрибута android:dependancy в файле XML.

Intereting Posts
Google API для отправки запроса от приложения android в google plus Каков существенный размер растрового изображения? Проблемы с mTextEditorWatcher на Android Ошибка входа в систему Asmack на Android 5.0 и выше Android Spinner с различными макетами для «выпадающего состояния» и «закрытого состояния»? Match_parent не работает для ListView, если ListView находится внутри NestedScrollView Почему звуки SoundPool не воспроизводятся одновременно в onClick ()? Android обнаружит нажатие клавиши для OnScreen Keyboard Получение «Невозможно разрешить метод» addOnCompletionListener () «…» при попытке разместить некоторый код внутри метода builder.setPositiveButton onClick () Как выровнять кнопку по центру и сделать смещение Как получить путь SD_Card в android6.0 программно ViewPager внутри фрагмента, как сохранить состояние? Был ли Dalvik перенесен на другие платформы (например, Linux, Windows и т. Д.)? Как установить программный эффект Ripple на LinearLayout? Перетаскивание между двумя фрагментами?