【发布时间】:2017-01-14 18:32:22
【问题描述】:
我正在尝试 android 数据绑定,我对它的功能感到非常惊讶。它确实将视图的所有 getter 和 setter 转移到一个地方(布局文件或自定义绑定适配器)。
但是,我不明白这里的命名空间有什么用?我正在阅读 George 最近在 Medium here 上发表的一篇文章,他提到:
应用程序命名空间中的任何东西都不需要参数中的任何命名空间,但对于android命名空间中的属性,您必须给出完整的属性名称,包括“android”。
所以,如果我不提供命名空间,它就可以工作。我的自定义属性以 xmlns:app="http://schemas.android.com/apk/res-auto" 命名。我真的不知道那是什么意思。
假设我有一个文本视图,我正在这样做(例如硬编码字符串):
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text='@{"Created By:" + user.name + " on " + user.time}' />
真的很好,我可以在这里提供参数:
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:createdBy="@{user.name}"
app:createdAt="@{user.time}" />
并通过将文本设置为与上面示例中的相同来处理 Java 中的代码。这为布局文件提供了易于使用且易于理解的代码。
但是,这个论点有时会发生冲突。如果我在 2 个不同的地方以 2 种不同的格式使用它,例如 Created by User A on 7/10/2016 和 From User A (7/10/2016)。这两者都需要与我在第二个示例中显示的相同的参数。我怎样才能区分它们?
我也可以提供像app:format这样的第三个参数,这样我的自定义绑定函数就可以理解了,但是命名空间可以在这里发挥重要作用吗?我可以为多个数据绑定元素提供自定义命名空间并在我的绑定适配器中相应地处理它们吗?或者正如 George 在他的文章中提到的那样,命名空间将被忽略?
在官方文档中,他们使用了bind: 命名空间,并在绑定适配器方法中提供了命名空间。我对命名空间在数据绑定中的作用有点困惑。
【问题讨论】:
标签: android data-binding namespaces android-databinding