我已将Kotlin项目更新为使用支持库27.0.0。当我尝试在片段中获取活动上下文时,我收到此错误:
> Type mismatch: inferred type is FragmentActivity? but Context was expected
答案 0 :(得分:14)
可以安全地假设activity
或context
在任何片段的生命周期方法中都不为空(在onAttach
和onDetach)
之间。在这种情况下
context!!
似乎更好,因为如果它肯定是 NOT 应该是null,那么它就是null,这是非常错误的,你应该崩溃。
在异步回调当然检查null。
对我来说“!!”永远不会和选择。
然后一定要把它抽象出去。这就是我在BaseFragment
课程中所做的:
val context: Context
@JvmName("getContext2")
get() = getContext()!!
然后在使用网站:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
context // Context is *never* null here.
}
fun someCallbackMethod() {
if (isAdded) {
context // Context is also not null here.
} else {
// But it is null here.
}
}
无处不在的空检查与非空的断言运算符一样糟糕。
这等于在添加了可空性注释的支持库27之前会发生的情况。您可以在任何地方访问context
,如果它为空并且已取消引用,则会崩溃。
更新:最近的支持库为此案例介绍了方法:
与我上面的建议不同的是,这些方法会抛出IllegalStateException
而不是KotlinNullPointerException
。