Я использую PreferenceFragment
для настройки некоторых общих предпочтений.
В определенный момент, когда пользователь нажимает кнопку «загрузить лучшие настройки», я устанавливаю некоторые SharedPreferences
в значения optmal ...но, как все знают, изменение общих настроек не приводит к изменению компонентов на экране, поэтому мне нужно переопределить фрагмент, чтобы пользователь мог увидеть изменения.
Я пробовал несколько способов перезагрузить фрагмент, ноу всех них были проблемы с моей логикой, так как большинство моих компонентов являются переключателями, я решил вручную включить / выключить
Preference preference = getPreferenceScreen().findPreference(pref);
preference.setEnabled(true);
preference.setOnPreferenceChangeListener(null);
((TwoStatePreference)preference).setChecked(true);
preference.setOnPreferenceChangeListener(this);
, это пример кода того, как это делается.
Однако, несмотря на то, что я установил ChangeListener
на null
перед изменением предпочтения, его методы onPreferenceChange
по-прежнему вызывались в НЕКОТОРЫХ ВЕРСИЯХ АНДРОИДА, что делает мою программу такой, что кнопка нажималась дважды и приводила к нежелательному состоянию
Я тестировал Android 16 и 27
на 16 onPreferenceChange
ошибочно вызывается
на 27, у него все нормально
Я не знаю, какая версия молотитстарые версии этого поведения, и у меня недостаточно версий для Android, чтобы проверить его.
Кто-нибудь знает какой-либо способ решить эту проблему