Деактивированный Preference с реакцией на нажатия (Android)

Обычный Preference не будет обрабатывать нажатия, если его отключить (установить setEnabled(false)). Но обработать события нажатия ( OnPreferenceClickListener) на деакцивированную опцию иногда может понадобится.

Я использовал такой способ, но может есть способ проще.


К сожалению в родительском классе Preference метод, в котором происходит непосредственная проверка возможности нажатия и вызов обработчика, закрыт от переопределения.

Поэтому пришлось переопределять несколько переменных, в которых хранится некоторые состояния вьюшки ( IsEnabled, DependencyMet, ParentDependencyMet), и методов класса, которые используют эти состояния.

Но есть косяк – если необходимо получить актуальное значение активности вьюшки, то нужно использовать отдельный метод isEnabled2().

Для классов ListPreference и CheckBoxPreference все аналогично.

 

 

Для Preference из библиотеки совместимости AndroidX достаточно будет изменить метод onBindView на onBindViewHolder:

 

Метод setEnabledStateOnViews был взят из Preference как есть:

 

Пример использования:

 

Добавить комментарий

Ваш адрес email не будет опубликован.