Kotlin(Android Studio 3)中未解析的引用getValue()

时间:2018-11-13 11:45:31

标签: android kotlin android-preferences

我使用“首选项”在设置页面上具有以下代码。我可以找到正确的ListPreference,可以设置摘要字符串,但是无法从首选项对象获取值。至少Android Studio无法找到对getValue()方法的引用。

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.support.v7.preference.ListPreference
import android.support.v7.preference.Preference
import android.support.v7.preference.PreferenceFragmentCompat


class SettingsActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_settings)

        setSupportActionBar(findViewById(R.id.settings_toolbar))
        supportActionBar?.setDisplayHomeAsUpEnabled(true)

        supportFragmentManager
            .beginTransaction()
            .replace(R.id.content_settings, MySettingsFragment())
            .commit()

    }

    class MySettingsFragment : PreferenceFragmentCompat() {
        override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
            setPreferencesFromResource(R.xml.pref_settings, rootKey)
            val pref = findPreference("selected_maptype")
            pref.summary = "This is a summary"
            val current_value = pref.getValue()
        }
    }
}

2 个答案:

答案 0 :(得分:0)

getValue()ListPreference而非Preference的方法,因此您需要进行强制转换。

val pref = findPreference("selected_maptype") as ListPreference
val current_value = pref.value

您将在Kotlin中使用pref.value而不是pref.getValue()。 Kotlin用直接名称更改吸气剂设置器。

答案 1 :(得分:0)

在Kotlin中, getter setter 通常是默认设置的,因此我们不能使用 getter setter 来调用它们功能。

一种简单的访问方式是使用(。)dot 运算符使用直接变量名称。

您可以参考此Kotlin Properties