将支持库从v-26.1.0更新到v-27.0.0我的片段中出现多个错误。
这里列出了一些错误:
错误:智能投射到'捆绑'是不可能的,因为'论证'是一个 这个时候本可以改变的可变属性。
错误:' onCreateView'没有任何内容
错误:' onViewCreated'没有任何内容
错误:类型不匹配:推断类型是View?但是查看了 预期
错误:类型不匹配:推断类型是上下文?但是上下文 预计
错误:类型不匹配:推断类型是FragmentActivity?但 预期上下文
错误:类型不匹配:推断类型是FragmentActivity?但 预期上下文
来自android studio的空片段模板。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (arguments != null) {
mParam1 = arguments.getString(ARG_PARAM1)
mParam2 = arguments.getString(ARG_PARAM2)
}
}
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater!!.inflate(R.layout.fragment_blank, container, false)
}
override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
}
答案 0 :(得分:38)
所有这些错误的根本原因是在支持库v-27.0.0中添加了@Nullable
和@NonNull
注释。
并且由于kotlin语言意识到可空性,并且与Nullable
和NonNull
具有不同的类型,与Java不同。
没有这些注释,编译器无法区分它们,Android工作室正在尽力推断出正确的类型。
TL; DR:更改类型以正确反映可空性状态。
错误:智能投射到'捆绑'是不可能的,因为'论证'是一个 这个时候本可以改变的可变属性。
更改arguments.getString(ARG_NAME)
==> arguments?.getString(ARG_NAME) ?: ""
错误:' onCreateView'没有任何内容
chane:
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View?
==>
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View?
错误:' onViewCreated'没有任何内容
变化:
override fun onViewCreated(view: View?, savedInstanceState: Bundle?)
==>
override fun onViewCreated(view: View, savedInstanceState: Bundle?)
错误:类型不匹配:推断类型是上下文?但是上下文 预计
如果将上下文作为参数传递给方法,只需使用快速修复将getContext()
替换为getContext()?.let{}
这同样适用于kotlin短版context
。
else if用于调用某个方法将getContext().someMethod()
替换为getContext()?.someMethod()
同样适用于kotlin短版context?.someMethod()
。
错误:类型不匹配:推断类型是FragmentActivity?但 预期上下文
使用上一个错误的修复程序。