Как изменить значок SwitchPreference, когда он меняет состояние с выключенного на включенное?

Я хотел бы изменить значок в SwitchPreference (например, для включения звука уведомлений), как только состояние будет изменено с вкл на выкл и наоборот.

Это код моего SwitchPreference:

<SwitchPreference
    android:key="@string/pref_key_sound"
    android:id="@+id/pref_key_sound"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:title="@string/pref_sound"
    android:summaryOff="Off"
    android:summaryOn ="On"
    android:showText="true"
    android:defaultValue="false"
    android:icon="@mipmap/ic_volume"
/>

Как вы можете видеть здесь, я установил только фиксированный значок.

1 ответ

Решение

Я решил проблему.

В моем PreferenceActivity я зарегистрировал свои SharedPreferences, чтобы прослушивать изменения, подобные этому: prefs.registerOnSharedPreferenceChangeListener,

в onSharedPreferenceChangedобратный вызов Я только что проверил, соответствует ли ключ одному из моих SwitchPreference и если да, я проверил, был ли он выбран или нет, получив логическое значение, сохраненное в SharedPreferences:

boolean isOn = sharedPreferences.getBoolean(getString(R.string.pref_key_sound), true);

После этого я получил ссылку на мой SwitchPreference:

SwitchPreference switchPreference = (SwitchPreference) settingsFragment.findPreference("pref_key_sound");

и просто изменил значок на основе логического isOn поскольку значение обновляется при каждом нажатии переключателя:

if (isOn) {

     switchPreference.setIcon(R.mipmap.ic_volume);

   } else {

      switchPreference.setIcon(R.mipmap.ic_volume_off);

   }

Просто как тот!:) Надеюсь, это понятно!

Другие вопросы по тегам