1

我正在扩展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 和 pre-6 的设备上,开关始终处于关闭状态,并且如果单击它则无法更改,甚至无法以编程方式更改,但更改侦听器会被触发。

你知道问题是什么吗?

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

Edit2:发现在下面的方法switchView里面null是: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。

4

1 回答 1

1

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

于 2019-08-09T23:21:19.580 回答