类型不匹配:推断类型是FragmentActivity? 但是在将支持库更新到27.0.0时预期上下文
我已经更新了我的Kotlin项目以使用支持库27.0.0。 当我尝试获取片段中的活动上下文时,出现此错误:
> Type mismatch: inferred type is FragmentActivity? but Context was expected
假设activity
或context
在任何片段的生命周期方法( onAttach
和onDetach)
之间onDetach)
都不为null是安全的。 在这种情况下
context!!
似乎更好,因为如果它是空的,当它绝对不应该是空的,有些是非常错误的,你应该只是崩溃。
在异步回调当然检查为空。
为了我 ”!!” 从来没有和选择。
然后通过一切手段将它抽象出来。 这就是我在我的BaseFragment
类中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
,如果它是空的和解除引用,它会崩溃。
你可以这样处理:
val context = activity context?.let { ...use the context... }