Как заблокировать открытие диалогового окна ListPreference при нажатии на эту ListPreference? - PullRequest
0 голосов
/ 06 июня 2019

У меня есть 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!?

...