首页 > 解决方案 > 如何修复首选项“屏幕”找不到“依赖”开关

问题描述

未找到首选项“屏幕”的依赖项“开关”

当我使用 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>

标签: android

解决方案


我以编程方式解决了这个问题,但只有 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
        }

}


推荐阅读