哪一个是有效的数据绑定符号“android:text =”@ = {prop}“”或“android:text =”@ {prop}“”

时间:2017-08-07 07:02:30

标签: android

我阅读了有关数据绑定的教程,就像下面的Android开发人员的示例一样

   <TextView android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="@{user.firstName}"
       android:onClick="@{handlers::onClickFriend}"/>

但是当我在TextInputLayout xml

上实现数据绑定功能时
<android.support.design.widget.TextInputLayout
    android:id="@+id/user_id_wrapper"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="@dimen/spacing_normal"
    android:layout_marginBottom="@dimen/spacing_normal">
    <android.support.design.widget.TextInputEditText
        android:id="@+id/input_user_id"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="text"
        android:lines="1"
        android:text="@={viewmodel.userName}"
        android:hint="@string/prompt_username" />
</android.support.design.widget.TextInputLayout>

并在viewmodel中声明变量

public final ObservableField<String> userName = new ObservableField<>();

当我拨打userName.get()时,它总是给我null

但是,我只从

更改数据绑定语法
android:text="@{viewmodel.password}"

android:text="@={viewmodel.password}"

我的userName.get()最终返回用户输入值。

为什么会这样?

1 个答案:

答案 0 :(得分:1)

根据我的理解,android:text="@={viewmodel.userName}"用于双向数据绑定(数据可以来自程序或布局),您可以通过使用实时数据进行更新观察到。

另一方面,android:text="@{viewmodel.userName}"用于简单值,您可以使用简单数据类型(如String等)手动设置值。

因此,因为您使用的是Observable,所以必须使用@=