如果在两种情况下都启用了数据绑定,binding.name.text && name.text 之间有什么区别

What is the difference between a binding.name.text && name.text if data binding is enabled in both cases

我刚开始学习数据绑定,在理解它的技术方面遇到了一些困难

在我的以下代码中,我在应用 Gradle 文件中启用了数据绑定以便使用它并摆脱 findviewbyid() ...所以我将绑定变量创建为 lateinit在 oncreate() 函数之前,然后我在 on create fun 中初始化它,如下所示:binding = DataBindingUtil.setContentView(this, R.layout.activity_main) 我将在我的 XML 文件中为您提供一个视图示例,以在 ...

<EditText
        android:id="@+id/nickName_editText"
        style="@android:style/Widget.DeviceDefault.Light.EditText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="@dimen/Margin"
        android:layout_marginTop="@dimen/Margin"
        android:layout_marginRight="@dimen/Margin"
        android:hint="@string/hint"
        android:inputType="textPersonName"
        android:textAlignment="center" />

回到kotlin文件下面这两行代码有什么区别(*两行都有效nickName_editText.visibility = View.VISIBLE

binding.nickNameEditText.visibility = View.VISIBLE

我知道我们想要摆脱 findviewbyid() 以使应用程序更快,但为什么我们不像第一行那样做,而且我们也没有调用 findViewById()

我是 android 开发的新手,所以我可能无法理解那些复杂的答案:‑D

感谢您的帮助!

这些都是数据绑定的形式,binding.nicknameEditText是 Android 的实现,也是推荐的方法。 “nickName_editText”是 Kotlin 数据绑定并且有已知的错误问题,当您进入更复杂的视图时,它们会开始弹出。

在 MainActivity 中扩展您的导入,您会注意到以下导入。

import kotlinx.android.synthetic.main.activity_main.*

开头表示布局中所有视图的绑定。

如果您“删除 kotlinx.android.synthetic.main.activity_main.*”,您会注意到“nickName_EditText”现在未定义。

您还可以通过

查看Kotlin字节码
clicking on tools/Kotlin/show Kotlin ByteCode

如果您单击“nickName_editText”,您会注意到该部分的字节码将突出显示。

希望这能回答您的所有问题