当前位置: 首页 > 知识库问答 >
问题:

只有安全(?。)或非空断言(!!。)允许在MenuItem [duplicate]类型的可空接收器上进行调用

韩华美
2023-03-14

我试图为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)
}

共有1个答案

赵征
2023-03-14

问题是被定义为可空。因此在使用它之前,您需要确保它不应为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)
}

或者您可以使用< code>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)
}
 类似资料:
  • 问题内容: 如何使用T-SQL更改表中的一个属性以允许为null(不为null-> null)?也许更改表? 问题答案:

  • 主要内容:将值保存到空接口,从空接口获取值,空接口的值比较空接口是接口类型的特殊形式,空接口没有任何方法,因此任何类型都无须实现空接口。从实现的角度看,任何值都满足这个接口的需求。因此空接口类型可以保存任何值,也可以从空接口中取出原值。 提示 空接口类型类似于 C# 或 Java 语言中的 Object、C语言中的 void*、 C++ 中的 std::any。在泛型和模板出现前,空接口是一种非常灵活的数据抽象保存和使用的方法。 空接口的内部实现保存了对

  • 问题内容: 如JDK文档中所指定,Hashtable不允许空键或值。HashMap允许一个null键和任意数量的null值。为什么是这样? 问题答案: Hashtable是较老的类,通常不鼓励使用Hashtable。也许他们看到了对null键的需求,更重要的是对null值的需求,并将其添加到HashMap实现中。 HashMap是较新的,并且具有更高级的功能,这些基本上只是对Hashtable功能

  • 问题内容: 我正在学习接口,类型转换和带有指针接收器的方法。指针接收器方法背后的规则和术语使我感到困惑。让我展示我对一个程序的困惑。 这是我的Go程序。 这是输出。 如果删除最后注释的行,则会出现此错误。 如何修复该行代码,以便能够使用指针接收器调用该方法?请通过提出带有指针接收器的方法的概念来说明解决方案,以阐明为什么它不起作用。 问题答案: 您不能(在这种情况下,对于指针接收器是隐式的)获取表

  • 番石榴的模式很棒,因为它有助于用null消除歧义。当链的第一部分可能不存在时,转换方法非常有助于创建空安全方法链,但当链的其他部分不存在时则不有用。 这个问题与Guava可选类型有关,当转换返回另一个可选时,它会问本质上相同的问题,但对于不同的用例,我认为这可能不是的预期用途(处理错误)。 考虑一个方法<代码>可选 在中间方法可能返回/的常见情况下,似乎没有一种优雅的方法来链接调用。例如,假设有一