Kotlin - Preference.setOnPreferenceClickListener

Dan*_*ele 3 android preferences kotlin

我正在尝试在我的 SettingsFragment 中添加一个 onPreferenceClickListener ,如果我这样做:

signOutPref.setOnPreferenceClickListener(object: Preference.OnPreferenceClickListener {
           override fun onPreferenceClick(preference: Preference?): Boolean {
                    val signOutIntent = Intent(activity, SignInActivity::class.java)
                    startActivity(signOutIntent)
                    return true
                }
            })
Run Code Online (Sandbox Code Playgroud)

它在发出警告的同时完美运行:

使用属性访问语法

而如果我这样写:

signOutPref.setOnPreferenceClickListener {
                val signOutIntent = Intent(activity, SignInActivity::class.java)
                startActivity(signOutIntent)
                return true
            }
Run Code Online (Sandbox Code Playgroud)

这应该是完全相同的事情,这是最好的方法,我得到:

布尔文字不符合预期的类型 Unit

return true声明上。

我错过了什么?第二种方法与第一种方法不同吗?我如何摆脱这个错误?

s1m*_*nw1 7

在 lambda 中,最后一个语句会自动成为返回值,除非它的返回类型被推断为Unit。所以只需删除return.

signOutPref.setOnPreferenceClickListener {
   val signOutIntent = Intent(activity, SignInActivity::class.java)
   startActivity(signOutIntent)
   true
}
Run Code Online (Sandbox Code Playgroud)

文档说:

一个 lambda 表达式总是被花括号包围,完整语法形式的参数声明放在花括号内并有可选的类型注释,主体在 -> 符号之后。如果lambda 的推断返回类型不是Unit则将 lambda 主体内的最后一个(或可能是单个)表达式视为返回值