DataBinding双向绑定

DataBinding是Android的一种数据绑定技术,实现数据与UI的双向同步。常见于登录页面,如用户名输入框。它包含ObservableField和LiveData,前者在数据变化时通知UI,后者在任何线程中更改值时都会通知UI,并感知Activity生命周期。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概念

将数据和页面绑定起来,数据的变化会反映到界面上,界面上内容的变化也会同步更新到数据上。

应用场景

一般是登录页面用户名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:

  1. 只有在数据发生改变时UI才会收到通知
  2. 一般是和布局文件xml的变量进行绑定的,调用其set方法后更新数据,这时候绑定的UI也会随之变化(在双向绑定时,一般用来定义用户名和密码)

LiveData:

  1. 只要你postValue(任何线程)或者setValue(主线程),UI都会收到通知,不管数据有无变化
  2. 能感知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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值