Как изменить значок 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);
}
Просто как тот!:) Надеюсь, это понятно!