android - 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 来膨胀视图然后在下一行绑定?
解决方案
为什么我们在分配视图时引用 _binding 来膨胀视图然后在下一行绑定?
这里要理解两个概念。
_binding
被认为是支持属性- 即保存值的实际变量引用。在这种情况下,变量是可为空的类型。binding
是一个标准属性- 即提供对底层支持字段的访问的东西。在这种情况下,它_binding
用作支持属性作为一个次要的方便公开_binding
为非空值。
所以 - 因为binding
只是_binding
作为非空值公开,所以_binding
必须先设置。所以这就是为什么它被分配了 inflate 调用的值。另请注意,_binding
is avar
意味着它可以重新分配,而binding
is aval
意味着它不能。所以在膨胀视图时尝试使用binding
不会编译。
最后,他们为什么binding
用来获取视图尚不清楚。可能只是为了方便/一致性使用binding
作为单个属性来引用类绑定。使用_binding?.root
也可以。
推荐阅读
- java - Centos 7 中的 PKIX 路径构建失败
- mongodb - 如何从 MongoDB 集合中收集特定样本?
- cordova - 如何使用cordova phonegap 条形码扫描仪从整数字符串生成(不扫描)UPC_A 条形码
- uwp - 如何控制 Windows ML 用于评估的线程数
- python - 将原始值与计算出最小二乘的值进行比较
- android - 如何将按钮添加到系统管理的 ConnectionService 调用屏幕?
- angular - 如何从选择选项中选择数据对象并在其他下拉菜单中使用它
- android - Excolo 滑块区域内的链接在我的设备上不起作用
- haskell - 使用冲突实现一个简单的布隆过滤器
- java - 一次重新加载所有 cache2k 条目