cre*_*not 20 android android-fragments kotlin android-support-library android-8.0-oreo
自从我将项目更新到SDK版本27并将支持库的gradle插件更新为27.0.0我需要更改代码的版本.
随着26.1.0我就可以使用getContext()(与科特林context)在我Fragment(android.support.v4.app),我有没有空性的问题,但因为我使用科特林我有一个版本的一个问题27.0.0,我所有的context电话没有工作了,我需要一个安全的操作,如context!!,但由于我个人觉得每次我做自己的解决方法都是一种喧嚣
override fun getContext() = super.getContext()!!
Run Code Online (Sandbox Code Playgroud)
改变的另一件事(突然,这就是我要问的原因)是方法onCreateView()和onViewCreated().在onCreateView充气是不可能空了,所以我需要改变我的函数签名正确地从覆盖onCreateView(inflater: LayoutInflater?...)到onCreateView(inflater: LayoutInflater...)和同为createdView参数onViewCreated.
所以现在我想知道为什么,特别是(对于Kotlin)非常难看的getContext()改变,并转向https://developer.android.com/sdk/support_api_diff/27.0.0/changes.html.
但等等,显然他们没有改变它?所以现在我的问题是,如果我做错了什么,或者他们是否真的改变了它,如果是这样,我可能会问他们为什么?
顺便说一下,同样适用getActivity(),我认为mHost == null检查已经添加,getActivity方法甚至是最终的,所以我不能在那里使用我的解决方法,这使得它非常非常难看.实际上在源文件中方法看起来是一样的,但26.1.0有Kotlin返回类型Context!和27.0.0返回类型Context?.
zsm*_*b13 38
这些是故意的改变.在此版本的支持库之前,这些类没有可空性注释,因此从Kotlin开始,所有这些类型都只是平台类型.在27,他们添加了必要的注释,所以现在这些类型在Kotlin中肯定被标记为可空或不可空 - 没有必要猜测它们是否可以null.
至于你提到的具体方法:
getActivity和getContext因为当方法返回可空类型Fragment不附加到Activity,已经回到这些方法null.行为没有变化,现在只是明确标记,所以你可以安全地处理它.inflater参数onCreateView曾经是一个平台类型,因此您是否将其标记为可空是由您自己决定的.因为它永远不会被调用null,所以它已被明确注释为@NonNull,因此它在Kotlin中的类型现在严格地LayoutInflater而不是"宽松" LayoutInflater!类型.编辑:从支持库27.1.0开始,你可以使用返回非可空类型的requireActivity和requireContext方法,以及IllegalStateException常规方法返回时它们会抛出的警告null.
| 归档时间: |
|
| 查看次数: |
4580 次 |
| 最近记录: |