我试图在我的onPreferenceClickListener中添加一个SettingsFragment,如果我这样做的话:
signOutPref.setOnPreferenceClickListener(object: Preference.OnPreferenceClickListener {
override fun onPreferenceClick(preference: Preference?): Boolean {
val signOutIntent = Intent(activity, SignInActivity::class.java)
startActivity(signOutIntent)
return true
}
})它在发出警告时工作得很好:
使用属性访问语法
如果我这样写的话:
signOutPref.setOnPreferenceClickListener {
val signOutIntent = Intent(activity, SignInActivity::class.java)
startActivity(signOutIntent)
return true
}这应该是完全相同的事情,这是最好的方法,我得到一个:
布尔文本不符合预期的类型单位
在return true语句上。
我遗漏了什么?第二种方法与第一种不同吗?如何消除此错误?
发布于 2018-02-17 09:32:34
在lambda中,最后一个语句自动成为返回的值,除非它的返回类型被推断为Unit。因此,只需删除return即可。
signOutPref.setOnPreferenceClickListener {
val signOutIntent = Intent(activity, SignInActivity::class.java)
startActivity(signOutIntent)
true
}文件上说:
lambda表达式始终被大括号包围,参数声明以完整的语法形式出现在花括号中,并具有可选的类型注释,主体位于->符号后面。如果所推断的lambda的返回类型不是
Unit,则将lambda主体中的最后(或可能是单个)表达式视为返回值。
发布于 2018-02-17 09:25:14
你必须使用return@setOnPreferenceClickListener true。
解释
在Kotlin中,return@label语法用于指定该语句从多个嵌套函数中返回的函数。
https://stackoverflow.com/questions/48839778
复制相似问题