提问者:小点点

Kotlin的Android开发人员,被教程迷惑


我在kotlin代码实验室苦苦学习android的一个基础知识。我是一个初学者,在闭锁中学习编程是为了好玩。

这就是所讨论的教程

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

private val binding get()=_binding!!

要获得它的一个版本,我们可以在不使用?安全问题无效。目前一切正常。

但是,在步骤4中,它显示了以下代码:

重写fun onCreateView(Inflater:LayoutInflater,Container:ViewGroup?,SavedInstanceState:Bundle?):View?{
_binding=fragmentletterlistbinding.inflate(inflater,container,false)
val view=binding.rootreturn视图}

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


共1个答案

匿名用户

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

这里要理解两个概念。

  1. _binding被认为是一个支持属性--即保存值的实际变量引用。在这种情况下,变量是可为空的类型。
  2. binding是一个标准属性--也就是说,它提供了对底层备份字段的访问。在本例中,它使用_binding作为支持属性,以便将_binding公开为非空。

因此--由于binding只是将_binding公开为非空值,所以必须首先设置_binding。这就是为什么它被分配了inflate调用的值。还要注意,_binding是一个var,这意味着它可以被重新赋值,而binding是一个val,这意味着它不能被重新赋值。因此在膨胀视图时尝试使用binding将无法编译。

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