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

Ben*_*leb -1 android kotlin

我正在尝试为 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)
}
Run Code Online (Sandbox Code Playgroud)

ADM*_*ADM 6

问题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)
}
Run Code Online (Sandbox Code Playgroud)

或者你可以使用 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)
}
Run Code Online (Sandbox Code Playgroud)