我正在尝试在设置页面中显示项目摘要 .

settings_pref.xml
enter image description here

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android">

    <CheckBoxPreference
        android:defaultValue="@bool/show_button_default"
        android:key="@string/textview_visibility_key"
        android:summaryOff="@string/hidden"
        android:summaryOn="@string/shown"
        android:title="Show TextView"/>
    <EditTextPreference
        android:defaultValue="@string/default_textview_text"
        android:key="@string/textview_text_key"
        android:selectAllOnFocus="true"
        android:singleLine="true"
        android:title="Change TextView's Text" />
    <ListPreference
        android:defaultValue="@string/pref_bckgrnd_colour_black_value"
        android:entryValues="@array/background_colour_values"
        android:key="@string/textview_backgroundcolor_key"
        android:entries="@array/background_colour_labels"
        android:title="TextView Background Color" />
    <ListPreference
        android:defaultValue="@string/pref_txt_colour_white_value"
        android:entries="@array/text_colour_labels"
        android:entryValues="@array/text_colour_values"
        android:key="@string/textview_textcolor_key"
        android:title="TextView Text Color"/>
</PreferenceScreen>

SettingsFragment.kt

import android.os.Bundle
import android.preference.CheckBoxPreference
import android.preference.ListPreference
import android.support.v7.preference.Preference
import android.support.v7.preference.PreferenceFragmentCompat
import android.util.Log

class SettingsFragement : PreferenceFragmentCompat(){
    val TAG = "SettingsFragement"
    override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
        addPreferencesFromResource(R.xml.settings_pref)

        val sharedPref = preferenceScreen.sharedPreferences
        val prefScreen = preferenceScreen
        val count = preferenceScreen.preferenceCount

        for (index in 0..(count-1)) {
            val preference = prefScreen.getPreference(index)
            val prefKey = preference.key
            if (preference !is CheckBoxPreference) {
                try {
                    val value = sharedPref.getString(prefKey, "")
                    setPreferenceSummary(preference, value)
                } catch (e : Exception){
                    Log.e(TAG, "Caught CheckBoxPreference Exception, "+e.message)
                }
            }
        }
    }


    fun setPreferenceSummary(preference: Preference, value: String) {
        Log.d(TAG, "Preference $preference is ListPreference = ${preference is ListPreference}")
        if (preference is ListPreference) {
            val prefIndex = preference.findIndexOfValue(value)
            Log.d(TAG, "prefIndex is $prefIndex")
            if (prefIndex >= 0)
                preference.setSummary(preference.entries[prefIndex])
        }
    }
}

但是,总结不会显示

这是我的日志输出:

E / SettingsFragement:捕获CheckBoxPreference异常,java.lang.Boolean不能强制转换为java.lang.String D / SettingsFragement:首选项更改TextView的Text是ListPreference = false D / SettingsFragement:首选项TextView背景颜色是ListPreference = false首选项TextView文本颜色是ListPreference = false

所以我决定故意将首选项(在setPreferenceSummary中)转换为ListPreference,并且我捕获了异常 .

fun setPreferenceSummary(preference: Preference, value: String) {
        Log.d(TAG, "Preference $preference is ListPreference = ${preference is ListPreference}")
        if (preference is ListPreference) {
            val prefIndex = preference.findIndexOfValue(value)
            Log.d(TAG, "prefIndex is $prefIndex")
            if (prefIndex >= 0)
                preference.setSummary(preference.entries[prefIndex])
        }

        try {
            val prefIndex = (preference as ListPreference).findIndexOfValue(value)
        } catch (e : Exception){
            Log.e(TAG, e.message)
        }
    }

例外:

E / SettingsFragement:android.support.v7.preference.ListPreference无法强制转换为android.preference.ListPreference

我没有在我的设置布局中使用android.support.v7.preference.ListPreference,也没有导入它 .

请帮助我,错误来自哪里,为什么演员不工作?