Ответ 1
Собственно нашел это самостоятельно и решил, что я просто разместил его здесь, чтобы помочь любому, у кого может быть такая же проблема:
android:disableDependentsState="true"
Поместите это в управляющее предпочтение.
Есть ли атрибут XML, который выполняет полную противоположность android:dependency
?
Что бы я хотел, чтобы зависимое предпочтение было включено, когда другое НЕ проверено и отключено, когда оно проверено.
edit: может быть, проблема не в 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
и 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
.
Вызов и запись.
Если оба флажка сняты, оба могут быть проверены, но когда пользователь проверяет один из них, другой становится отключенным (greyed out).
Когда пользователь отменяет выбранные предпочтения, пользователь может проверить другой.
В обоих случаях могут быть зависимы другие настройки, которые могут быть отработаны с атрибутом android:dependancy
в файле XML.