Как сделать противоположность атрибута предпочтения 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
ADB используется для беспроводного подключения, теперь я не могу подключиться и получить ошибку с двумя портами (не удалось подключиться *. *. *. *: 5555: 5555) Как отключить масштабирование / масштабирование веб-страницы на Android? Broadcast Receiver все еще работает после приложения close – Android Проблемы с блокировкой Android в пользовательском приложении блокировки экрана Android In-App Billing: состояние покупки остается «купленным» после отмены заказа AutoLink = «все» функции TextView Android Как создать Celestia для Android? Переадресация порта Android Как работает Cloud to Device Messaging (C2DM)? Как использовать фрагменты и objectAnimator в старых версиях Android? Вход в Twitter без TwitterLoginButton Тестирование биллинга в приложении с помощью тестовых учетных записей Количество объектов Android / Java Json Эмулятор Android: как я могу получить список запущенных сервисов Как воссоздать или перезагрузить кэшированный Observable, используемый с Retrofit для получения новых данных?