我发现很多参数都有错误
Type mismatch
required: FragmentActivity
found: FragmentActivity?
我不确定解决此问题的最佳方法是什么。 目前,我将该行包装在一个变量中?.let { statement }
meViewModel = ViewModelProviders.of((iMainActivity as Fragment).activity, vmf).get(MeViewModel::class.java) }
进入
val fragmentActivity = (iMainActivity as Fragment).activity
fragmentActivity?.let
{
meViewModel = ViewModelProviders.of(fragmentActivity, vmf).get(MeViewModel::class.java)
}
这是解决这个问题的正确方法吗
最佳答案
简短回答:是的。
这意味着编译器不确定 s.th.是 !=null
。如果您确定它不为空,您还可以使用:
val fragmentActivity = (iMainActivity as Fragment).activity!!
这为您提供了 FragmentActivity
而不是 FragmentActivity?
并且您不需要 ?.let{}
请记住,这可能会抛出一个 NPE , 而
fragmentActivity?.let { fragment ->
meViewModel = ViewModelProviders.of(fragment, vmf).get(MeViewModel::class.java)
}
根本不会执行 .let{}
中的 block ,这通常比 NPE 危害小。参见 https://kotlinlang.org/docs/reference/null-safety.html了解更多。
关于android - Kotlin 类型不匹配,需要 : x found: x?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52948620/