首页 > 解决方案 > Kotlin 中的 Android 开发,被教程弄糊涂了

问题描述

我在 kotlin 代码实验室中努力学习其中一项 android 基础知识。我是一个初学者,为了好玩而在锁定中进行编程。

这是有问题的教程

在教程的开头,它说要获取对绑定named_binding的可为空引用,然后使用

私有 val 绑定 get() = _binding!!

要获得它的版本,我们可以在不使用 ? 零安全的东西。到目前为止一切都很好。

但是在第四步中,它显示了以下代码:

覆盖 fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
_binding = FragmentLetterListBinding.inflate(inflater, container, false)
val view = binding.rootreturn view}

为什么我们在分配视图时引用 _binding 来膨胀视图然后在下一行绑定?

标签: androidkotlingoogle-codelab

解决方案


为什么我们在分配视图时引用 _binding 来膨胀视图然后在下一行绑定?

这里要理解两个概念。

  1. _binding被认为是支持属性- 即保存值的实际变量引用。在这种情况下,变量是可为的类型。
  2. binding 是一个标准属性- 即提供对底层支持字段的访问的东西。在这种情况下,它_binding用作支持属性作为一个次要的方便公开_binding为非空值。

所以 - 因为binding只是_binding作为非空值公开,所以_binding必须先设置。所以这就是为什么它被分配了 inflate 调用的值。另请注意,_bindingis avar意味着它可以重新分配,而bindingis aval意味着它不能。所以在膨胀视图时尝试使用binding不会编译。

最后,他们为什么binding用来获取视图尚不清楚。可能只是为了方便/一致性使用binding作为单个属性来引用类绑定。使用_binding?.root也可以。


推荐阅读