Как сделать противоположность атрибута предпочтения android: зависимость?
есть ли атрибут XML, который делает полную противоположность android:dependency
?
что я хотел бы, чтобы зависимое предпочтение было включено, когда другой не проверен и отключен, когда он проверен.
edit: возможно, проблема не в android:dependency
может быть, есть атрибут xml, который я могу добавить, чтобы сделать значение по умолчанию для этого предпочтения отключено, а затем android:dependency
будет переключать ее в противоположную сторону, как я хочу.
редактировать еще раз:
Я попробовал установить android:enabled="false"
в предпочтение и он отключает его, как я хочу, но даже с тем, что он зависит от другого предпочтения, он не включил его, как я надеялся
5 ответов:
на самом деле нашел его самостоятельно и решил, что я просто опубликую его здесь, чтобы помочь всем, у кого может быть такая же проблема:
android:disableDependentsState="true"
поместите это в управляющее предпочтение.
Дмитрий Зарезенко спросил, Что делать, если вы хотите, чтобы некоторые зависимости были включены, когда предпочтение, от которого они зависят, истинно, а некоторые-когда это предпочтение ложно.
используйте метод, описанный выше, чтобы установить все зависимые предпочтения одного типа (которые когда-либо имеют большее число). Затем (с классом, имеющим реализации OnSharedPreferenceChangeListener) есть код, как это в Preference Activity и/или Preference Fragment:
@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
и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); } } }
в этом случае, у меня есть 2 взаимоисключающих Предпочтения в
PreferenceActivity
. Звоните и записывайте. Когда оба не отмечены, оба могут быть проверены, но когда пользователь проверяет один из них, другой становится отключенным (серым). Когда пользователь снимает флажок с проверенного предпочтения, пользователь может проверить другой.от них обоих могут зависеть другие предпочтения, и это может быть разработано с
android:dependancy
атрибут в XML-файле.