SwitchPreference in pre Android 7 始终关闭

SwitchPreference in pre Android 7 always switched off

我正在扩展 PreferenceFragmentCompat,在 onCreatePreferences 方法中使用 addPreferencesFromResource(R.xml.preferences) 设置首选项。

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

    <SwitchPreference
        android:defaultValue="true"
        android:key="disableAppWhenObscured"
        android:title="@string/screen_settings_block_app_when_obscured" />

</PreferenceScreen>

作为依赖项,我有以下条目:

implementation "androidx.preference:preference-ktx:1.0.0"

在设备 post Android 6.X 上,一切正常。在 Android 6 和 pre-6 的设备上,开关始终关闭,如果单击它则不会更改,甚至无法通过编程方式更改,但会触发更改侦听器。

你知道问题出在哪里吗?

编辑:如果我将 UI 元素更改为 CheckBoxPreference,即使在 Android 6 和 pre-6 中,一切都按预期工作。此外,在我开始使用 androidX 之前,SwitchPreference 也能正常工作。

Edit2:发现 switchViewnullSwitchPreference 里面的方法如下:

@Override
public void onBindViewHolder(PreferenceViewHolder holder) {
    super.onBindViewHolder(holder);
    View switchView = holder.findViewById(AndroidResources.ANDROID_R_SWITCH_WIDGET);
    syncSwitchView(switchView);
    syncSummaryView(holder);
}

这导致不更改 syncSwitchView 方法中的 UI。

使用 SwitchPreferenceCompat 而不是 SwitchPreference 应该可以解决问题。