我扩展了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"


在装有Android 6.X的设备上,一切正常。在装有Android 6和6之前版本的设备上,这些开关始终处于关闭状态,如果单击它,则无法更改,即使无法通过编程进行更改,但会触发更改侦听器。

你知道是什么问题吗?

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

Edit2:通过以下方法发现switchViewnull内的SwitchPreference

@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应该可以解决问题。

10-06 06:38