当 SwitchPreference 的状态从关闭变为打开时,如何更改它的图标?

How to change icon of SwitchPreference when it changes state from off to on?

我想在状态从打开更改为关闭后更改我的 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"
/>

如您所见,我只设置了一个固定图标。

我解决了问题。

在我的 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);

   }

就这么简单! :) 希望清楚!