Есть ли атрибут XML, который делает полную противоположность android:dependency
?
Что я хотел бы, чтобы зависимое предпочтение было включено, когда другой НЕ проверен и отключен, когда оно проверяется.
править: возможно, проблема не с android:dependency
возможно, существует атрибут XML, который я могу добавить для создания значения по умолчанию для того предпочтения отключенным и затем android:dependency
переключит это противоположный путь как, я хочу.
отредактируйте снова: Я пытался установить android:enabled="false"
в предпочтении и это отключает его как, я хочу, но даже с ним являющийся зависящим от другого предпочтения он не включил его как, я надеялся
Сделайте Ваш PreferenceActivity
implement
SharedPreferences.OnSharedPreferenceChangeListener
, объявляют в PreferenceActivity
:
SharedPreferences prefs;
инициализируют в onCreate
:
SharedPreferences sPrefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs = sPrefs;
и регистр на общем предпочтении изменяются, слушатель
prefs.registerOnSharedPreferenceChangeListener(this);
делают то же, как Steve сказал в onResume
и onPause
методы.
реализация [1 111] слушатель:
@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 взаимоисключающих Предпочтения в [1 112]. Звоните и Запись. Когда оба неконтролируемы, оба могут быть проверены, но поскольку пользователь проверяет, что один из них, другой становится отключенным (greyed). Поскольку пользователь снял флажок с проверенным предпочтением, пользователь может проверить другой.
На них обоих другие предпочтения могут зависеть, и это может быть разработано с [1 113] атрибут в XML-файле.
Я должен изменить значение зависимого предпочтения, таким образом, я отправляю свой код ниже, если кто-либо хочет сделать это:
@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);
}
Dmytro Zarezenko спросил что, если Вы хотели, чтобы некоторые зависимости были включены, когда предпочтение, от которого они зависят, верно и некоторые, чтобы быть включенным, когда то предпочтение является ложью.
Использование метод описал выше для установки всех подчиненных предпочтений одного типа (которые когда-либо имеют большее число). Затем (с классом, имеющим реализации 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));
}
}