【问题标题】:How to fix "Dependency "switch" not found for preference "screen"如何修复首选项“屏幕”找不到“依赖”开关
【发布时间】:2019-02-06 00:16:52
【问题描述】:

找不到偏好“屏幕”的依赖项“开关”

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


    【解决方案1】:

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

    }

    【讨论】:

      猜你喜欢
      • 2019-05-06
      • 1970-01-01
      • 2021-11-24
      • 1970-01-01
      • 1970-01-01
      • 2011-08-30
      • 1970-01-01
      • 2019-10-22
      相关资源
      最近更新 更多