PreferenceScreen具有键时旋转时崩溃

时间:2018-03-12 15:51:34

标签: android android-preferences

我有带键的首选项屏幕,因此我可以根据调试状态显示/隐藏它。

科特林

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

1 个答案:

答案 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

使用这种方法,我可以找到带标题而不是键的首选项,并避免键导致我从未完全理解的崩溃。