我有带键的首选项屏幕,因此我可以根据调试状态显示/隐藏它。
科特林
caller.findPreference("debug_key_screen").isVisible = Preferences.getPref(this).getBoolean(devKey, false)
XML
<android.support.v7.preference.PreferenceScreen
android:key="debug_key_screen"
android:title="@string/settings_debug_title">
但是当键存在时,它会在旋转时崩溃并伴随以下异常
Caused by: java.lang.IllegalArgumentException: Wrong state class -- expecting Preference State
答案 0 :(得分:0)
我从未找到过用密钥修复它的方法,但我设法创建了非常类似的解决方法。而不是键我使用标题进行识别。它可能不太理想,但标题在偏好中通常也是唯一的(这是我的情况)。
因为我在我的Android应用程序中使用Kotlin,我为PreferenceGroup编写了扩展函数,它与findPreference非常相似,但它并没有潜入组内(因为我的解决方案并不需要它)
fun PreferenceGroup.findDirectPreferenceByTitle(title: CharSequence): Preference? {
val count = preferenceCount
for (i in 0 until count) {
val preference = getPreference(i)
val prefTitle = preference.title
if (prefTitle == title)
return preference
}
return null
}
请注意PreferenceScreen
扩展PreferenceGroup
使用这种方法,我可以找到带标题而不是键的首选项,并避免键导致我从未完全理解的崩溃。