类型不匹配:推断类型是FragmentActivity? 但是在将支持库更新到27.0.0时预期上下文

我已经更新了我的Kotlin项目以使用支持库27.0.0。 当我尝试获取片段中的活动上下文时,出现此错误:

> Type mismatch: inferred type is FragmentActivity? but Context was expected 

假设activitycontext在任何片段的生命周期方法( onAttachonDetach)之间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... }