首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >科特林- Preference.setOnPreferenceClickListener

科特林- Preference.setOnPreferenceClickListener
EN

Stack Overflow用户
提问于 2018-02-17 09:21:02
回答 2查看 3.1K关注 0票数 4

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

代码语言:javascript
复制
signOutPref.setOnPreferenceClickListener(object: Preference.OnPreferenceClickListener {
           override fun onPreferenceClick(preference: Preference?): Boolean {
                    val signOutIntent = Intent(activity, SignInActivity::class.java)
                    startActivity(signOutIntent)
                    return true
                }
            })

它在发出警告时工作得很好:

使用属性访问语法

如果我这样写的话:

代码语言:javascript
复制
signOutPref.setOnPreferenceClickListener {
                val signOutIntent = Intent(activity, SignInActivity::class.java)
                startActivity(signOutIntent)
                return true
            }

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

布尔文本不符合预期的类型单位

return true语句上。

我遗漏了什么?第二种方法与第一种不同吗?如何消除此错误?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-17 09:32:34

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

代码语言:javascript
复制
signOutPref.setOnPreferenceClickListener {
   val signOutIntent = Intent(activity, SignInActivity::class.java)
   startActivity(signOutIntent)
   true
}

文件上说:

lambda表达式始终被大括号包围,参数声明以完整的语法形式出现在花括号中,并具有可选的类型注释,主体位于->符号后面。如果所推断的lambda的返回类型不是Unit,则将lambda主体中的最后(或可能是单个)表达式视为返回值

票数 8
EN

Stack Overflow用户

发布于 2018-02-17 09:25:14

你必须使用return@setOnPreferenceClickListener true

解释

Quoting from this anser

在Kotlin中,return@label语法用于指定该语句从多个嵌套函数中返回的函数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48839778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档