我阅读了有关数据绑定的教程,就像下面的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()
最终返回用户输入值。
为什么会这样?
答案 0 :(得分:1)
根据我的理解,android:text="@={viewmodel.userName}"
用于双向数据绑定(数据可以来自程序或布局),您可以通过使用实时数据进行更新观察到。
另一方面,android:text="@{viewmodel.userName}"
用于简单值,您可以使用简单数据类型(如String等)手动设置值。
因此,因为您使用的是Observable,所以必须使用@=
。