как программно включить SwitchPreference на Android

У меня есть фрагмент настроек, который загружает xml со страницей настроек по умолчанию, я также добавил один прослушиватель кликов для одного конкретного предпочтения

   @Override
        public void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            // Load the preferences from an XML resource
            addPreferencesFromResource(R.xml.settings);
       preferences.findPreference(getString(R.string.pref_custom_list)).setOnPreferenceChangeListener(this);
//other stuff.....

это отлично работает, когда пользователь щелкает, вызывает событие, и я могу проверить некоторую информацию о переключателе, включая отказ от изменения...

Но я хотел бы включить / выключить другие переключатели на том же экране, когда это даже произойдет.

Я пытался

   preferences.findPreference(getString(R.string.xpto)).setEnabled(true);

но он не включает и не выключает какой-либо переключатель... он просто включает или отключает представление для кликов

если я сделаю что-то вроде PreferenceManager.getDefaultSharedPreferences(this).edit().putBoolean("xpto",true).apply();

Это изменяет настройки, но изменения не загружаются на экран, поэтому пользователь не знает

как я могу программно включить или выключить некоторые предпочтения и заставить их отражаться на экране предпочтений


person Rafael Lima    schedule 30.11.2018    source источник


Ответы (3)


Вы можете использовать SwitchPreferenceCompat.

<SwitchPreferenceCompat
    app:key="key"
    app:title="Some Confs" />

Попробуйте это в своем фрагменте, если вы используете SwitchPreferenceCompat, как указано выше.

SwitchPreferenceCompat switchPref = findPreference("key");
switchPref.setChecked(true);
person Googlian    schedule 07.07.2020

Вы ищете setChecked(), а не setEnabled():

preferences.findPreference(getString(R.string.xpto)).setChecked(true);
person TheWanderer    schedule 30.11.2018
comment
в классе предпочтений не установлен проверенный метод - person Abhinav Chauhan; 28.04.2020
comment
@абинав чаухан . добавьте предпочтение в switchpreference, тогда вы получите свойство setchecked - person lava; 26.08.2020

Я думаю, вам нужно реализовать прослушиватель при изменении SharedPreferences.

SharedPreferences.OnSharedPreferenceChangeListener spChanged = new
                       SharedPreferences.OnSharedPreferenceChangeListener() {
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
        String key) {
    // change the Switch Preference state here
    }
};

Затем, когда предпочтения меняются, вы можете изменить экран пользователя, чтобы он соответствовал ему.

Для справки:

Как определить, были ли внесены изменения в настройки?< /а>

person Jim    schedule 30.11.2018
comment
я не был ясен в своем вопросе, я правильно понимаю события ... чего я не знаю, так это как включить ДРУГИЕ настройки, кроме того, на который нажали - person Rafael Lima; 30.11.2018