У меня есть ListPreference
, в котором я могу выбирать элементы и устанавливать параметры для целей. Когда я нажимаю на него во фрагменте настроек, где находятся все мои Preferences
, он открывает диалоговое окно и позволяет мне выбирать элементы, перечисленные в нем. Я использую два обработчика: OnPreferenceClickListener
(вызывается при нажатии на мой ListPreference
) и OnPreferenceChangeListener
(вызывается при выборе элемента в нем).
Я хочу заблокировать открытие диалога, не отключая ListPreference
, чтобы я не мог выбрать элементы в нем. Я заблокировал изменение предметов с глобальным boolean
в моем OnPreferenceChangeListener
.
boolean canChange = true;
final ListPreference listPreference = (ListPreference) findPreference("myListPreference");
listPreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
canChange = myCondition;
return true;
}
});
listPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
if(canChange)
someValueHolder = listPreference.findIndexOfValue(newValue.toString());
return true;
}
});
Это плохой код, но я бы лучше всего попытался избежать изменения перечисленных пунктов, если myCondition
равно false
. Но я хочу знать, как можно заблокировать всплывающее окно диалога, когда я нажимаю на предпочтение, если myCondition
равно false
, и вместо этого открываю диалоговое окно с предупреждающим сообщением типа You cannot change this ListPreference when myCondition is false!
?