概念
将数据和页面绑定起来,数据的变化会反映到界面上,界面上内容的变化也会同步更新到数据上。
应用场景
一般是登录页面用户名EditText会用到
代码说明
layout
<RelativeLayout
android:id="@+id/rl_name"
android:layout_width="match_parent"
android:layout_height="42dp"
android:layout_below="@id/iv_logo"
android:layout_marginLeft="48dp"
android:layout_marginRight="48dp"
android:background="@null"
android:paddingLeft="10dp">
<EditText
android:id="@+id/et_name"
android:layout_width="match_parent"
android:layout_height="42dp"
android:background="@null"
android:drawableLeft="@drawable/ic_login_user_name"
android:drawablePadding="10dp"
android:hint="请输入用户名"
android:inputType="text"
android:singleLine="true"
android:text="@={vm.userName}"
android:textColorHint="#c9c9c9"
android:textSize="15sp" />
<ImageView
android:id="@+id/iv_name"
android:layout_width="42dp"
android:layout_height="42dp"
android:layout_alignParentRight="true"
android:scaleType="centerInside"
android:src="@drawable/ic_login_delete"
android:visibility="@{vm.userName.empty?4:0}" />
</RelativeLayout>
<View
android:id="@+id/v1"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_below="@+id/rl_name"
android:layout_marginLeft="48dp"
android:layout_marginRight="48dp"
android:background="#e8e8e8" />
<RelativeLayout
android:id="@+id/rl_pwd"
android:layout_width="match_parent"
android:layout_height="42dp"
android:layout_below="@+id/v1"
android:layout_marginLeft="48dp"
android:layout_marginTop="30dp"
android:layout_marginRight="48dp"
android:background="@null"
android:paddingLeft="10dp">
<EditText
android:id="@+id/et_pwd"
android:layout_width="match_parent"
android:layout_height="42dp"
android:background="@null"
android:drawableLeft="@drawable/ic_login_lock"
android:drawablePadding="10dp"
android:hint="请输入密码"
android:inputType="textPassword"
android:singleLine="true"
android:text="@={vm.pwd}"
android:textColorHint="#c9c9c9"
android:textSize="15sp" />
<ImageView
android:id="@+id/iv_pwd"
android:layout_width="42dp"
android:layout_height="42dp"
android:layout_alignParentRight="true"
android:scaleType="centerInside"
android:src="@{showPwd?@drawable/ic_login_eye_show:@drawable/ic_login_eye}" />
</RelativeLayout>
viewmodel
var userName = ObservableField<String>().apply {
set("")
}
var pwd = ObservableField<String>().apply {
set("")
}
activity-清空用户名
R.id.iv_name -> { viewModel.userName.set("")}
补充说明
观察者变量
作用:更新数据
ObservableField:
- 只有在数据发生改变时UI才会收到通知
- 一般是和布局文件xml的变量进行绑定的,调用其set方法后更新数据,这时候绑定的UI也会随之变化(在双向绑定时,一般用来定义用户名和密码)
LiveData:
- 只要你postValue(任何线程)或者setValue(主线程),UI都会收到通知,不管数据有无变化
- 能感知Activity的生命周期,在Activity不活动的时候不会触发,例如一个Activity不在任务栈顶部
val seminarListData = MutableLiveData<MutableList<SeminarListBean>>()//类型为MutableList<实体类>
val seminarListData = MutableLiveData<MutableList<String>>()//类型为MutableList<String>
val seminarListData = MutableLiveData<SeminarListBean>()//类型为实体类类型
val seminarListData = MutableLiveData<String>()//类型为String