我尝试添加一个函数来启用/禁用片段中的一些按钮,但是出现编译错误
“在可为空的接收方上只允许安全(?.)或非空Assert(!!.)调用”
我试过几种不同的方法;从直接调用按钮到调用执行按钮操作的Activity,但我得到了相同的错误:
private fun enableButtons(buttonState: Boolean) {
(activity as MainActivity?).enableButtons(buttonState)
// ^ error there
}
以及
var button = activity.findViewById(R.id.button0) as Button
// ^ error here
button.isEnabled = false
button.isClickable = false
我刚接触Kotlin,不知道如何在不传递视图的情况下访问按钮
3条答案
按热度按时间cgvd09ve1#
好吧,这是在暗示你该怎么做:
"在可为空的接收方上只允许安全(?.)或非空Assert(!!.)调用"
意味着无论你使用什么变量,都可能是空的。所以如果你试着运行
这可能最终为:
这(您可能已经知道)将导致崩溃
kotlin所要求的只是一个替代方案(当变量实际上是
null
时)或一个变量不为空的"承诺"(!!)一个简单的解决方法就是使用:
或者只删除
MainActivity
之后的?
(more在
.?
和!!
上,您可以在此处找到:What's the difference between !! and ? in Kotlin?)jexiocij2#
如果不确定activity是否可以为空,则应使用以下语法:
其他人建议强制展开,但这意味着如果
activity
最终为空,您的应用程序将崩溃。这适用于任何可选值:
现在,如果您想再次使用该按钮,您可以简单地使用null安全语法:
有关null safety的更多信息,请查看:https://kotlinlang.org/docs/null-safety.html#checking-for-null-in-conditions
hgb9j2n63#
溶液1
在
MainActivity
前面卸下?
溶液2
在
(activity as MainActivity?)
之前添加?
注:MainActivity得到null的情况很少。因此,最佳解决方案是上面的第一个。