【问题标题】:Only safe(?.)or non-null asserted(!!.) calls are allowed on a nullable receiver of type MenuItem [duplicate]在 MenuItem 类型的可空接收器上只允许安全(?。)或非空断言(!!。)调用 [重复]
【发布时间】:2018-05-13 10:25:13
【问题描述】:

我正在尝试为 android studio 中的选项菜单项添加事件,但是当我使用 item.itemId 时收到此错误消息

在可空对象上只允许安全(?.) 或非空断言(!!.) 调用 MenuItem 类型的接收者

这是我的代码

override fun onOptionsItemSelected(item: MenuItem?): Boolean {

if(item.itemId==R.id.home){
    var homeIntent= Intent(this,SignIn::class.java)
    startActivity(homeIntent)

}
else if(item.itemId==R.id.sign_in){
    var signInIntent= Intent(this,SignIn::class.java)
    startActivity(signInIntent)

}
else if(item.itemId==R.id.close){
    System.exit(0)

}


return super.onOptionsItemSelected(item)
}

【问题讨论】:

  • item 是可空类型,所以可以为空。在 Kotlin 中,当您想要访问可空类型的某些内容时,您必须使用安全运算符 ?.,如错误消息提示,在您的情况下:item?.itemId==R.id.home 等。
  • @Melquiades 非常感谢您的回复,这解决了问题

标签: android kotlin


【解决方案1】:

问题是 item 被定义为 nullable 。所以在使用之前需要确保它不应该是null

override fun onOptionsItemSelected(item: MenuItem?): Boolean {
    if(item?.itemId==R.id.home){
        var homeIntent= Intent(this,SignIn::class.java)
        startActivity(homeIntent)

    }
    else if(item?.itemId==R.id.sign_in){
        var signInIntent= Intent(this,SignIn::class.java)
        startActivity(signInIntent)

    }
    else if(item?.itemId==R.id.close){
        System.exit(0)

    }
    return super.onOptionsItemSelected(item)
}

或者你可以使用let

override fun onOptionsItemSelected(item: MenuItem?): Boolean {
    item?.let {
        if(it.itemId==R.id.home){
            var homeIntent= Intent(this,SignIn::class.java)
            startActivity(homeIntent)

        }
        else if(it.itemId==R.id.sign_in){
            var signInIntent= Intent(this,SignIn::class.java)
            startActivity(signInIntent)

        }
        else if(it?.itemId==R.id.close){
            System.exit(0)

        }
    }
    return super.onOptionsItemSelected(item)
}

【讨论】:

    猜你喜欢
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    • 2016-03-24
    相关资源
    最近更新 更多