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:发现 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。
使用 SwitchPreferenceCompat 而不是 SwitchPreference 应该可以解决问题。
我正在扩展 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:发现 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。
使用 SwitchPreferenceCompat 而不是 SwitchPreference 应该可以解决问题。