android - 如何修复首选项“屏幕”找不到“依赖”开关
问题描述
未找到首选项“屏幕”的依赖项“开关”
当我使用 ListPreference 时,android:dependency="switch" 一切正常,当我关闭 android:dependency="switch" 时,我可以打开 PreferenceScreen。
但是要解锁 SwitchPreference 并打开 PreferenceScreen - 会出错。
java.lang.IllegalStateException:找不到首选项“屏幕”的依赖项“开关”(标题:“屏幕”
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<SwitchPreference
android:title="Switch"
android:key="switch"
android:summaryOn="Description of switch 2 on"
android:summaryOff="Description of switch 2 off"/>
<PreferenceScreen
android:dependency="switch"
android:key="screen"
android:summaryOn="Description of screen on"
android:summaryOff="Description of screen off"
android:title="Screen">
<CheckBoxPreference
android:summaryOn="Description of checkbox on"
android:summaryOff="Description of checkbox off"
android:title="CheckBox"
android:key="checkbox"/>
</PreferenceScreen>
</PreferenceScreen>
解决方案
我以编程方式解决了这个问题,但只有 xml 不起作用
class SettingsFragment : PreferenceFragmentCompat(), PreferenceFragmentCompat.OnPreferenceStartScreenCallback {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.ex_003_preference, rootKey)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val switch = preferenceScreen.findPreference("switch") as SwitchPreference
val screen = preferenceManager.findPreference("screen") as PreferenceScreen
screen.isEnabled = false
switch.isChecked = false
switch.setOnPreferenceClickListener {
screen.isEnabled = switch.isChecked
return@setOnPreferenceClickListener false
}
return super.onCreateView(inflater, container, savedInstanceState)
}
override fun onPreferenceStartScreen(preferenceFragmentCompat: PreferenceFragmentCompat?, preferenceScreen: PreferenceScreen?): Boolean {
preferenceFragmentCompat?.preferenceScreen = preferenceScreen
return true
}
override fun getCallbackFragment(): Fragment {
return this
}
}
推荐阅读
- java - 将公共方法转换为私有方法
- python - peewee 表的有效插入权限
- java - IST(印度标准时间)的 LocalDateTime 与 ZoneOffset 以更清洁的方式
- google-maps - “未处理的异常:NoSuchMethodError:在 null 上调用了 getter 'iterator'。” 当我在颤振中使用 google_maps_polyline 插件时抛出
- java - How can I make my robot turn 90 degree to the right?
- c++ - 如何避免在 cmake 中自动链接 Qt5 库?
- docker - Why portainer can not run successfully in docker of windows server 2016?
- php - 在函数内部调用函数时出错
- python - 使用 Pandas pd.DateOffset 查找随机日期前一个月的第一天
- php - PHP:“没有这样的文件或目录”但文件存在