Data Binding简介
Data Binding即数据绑定,使数据对象和xml布局绑定,支持双向绑定; 是一个实现数据和UI绑定的框架,是构建MVVM模式的一个工具。
Data Binding使用
1.在app模块下的build.gradle文件添加内容
android {
...
dataBinding {
enabled true
}
}
2.创建ViewModel
class LoginModel() : ViewModel() {
var ld_phone: MutableLiveData
var ld_code: MutableLiveData
var ld_content: MutableLiveData
}
3.布局转换
在layout布局中选中根布局进行转换
Convert to data binding layout
几个标签含义
layout 用作布局的根节点,只能包裹一个View标签,且不能包裹merge标签。data Data Binding的数据,只能存在一个data标签。variable data中使用,数据的变量标签,type属性指明变量的类,如com.alan.mvvm.viewmodel.LoginModel。name属性指明变量的名字,方便布局中使用。import data中使用,需要使用静态方法和静态常量,如需要使用View.Visble属性的时候,则需导入
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools"> name="model" type="com.alan.mvvm.viewmodel.LoginModel"/> name="activity" type="androidx.fragment.app.FragmentActivity"/> android:layout_width="match_parent" android:layout_height="match_parent"> android:id="@+id/txt_cancel" android:onClick="@{()-> activity.onBackPressed()}" /> android:id="@+id/txt_title" app:layout_constraintTop_toTopOf="parent" .../> android:id="@+id/et_account" android:text="@{model.ld_phone.get()}" android:onTextChanged="@{(text, start, before, count)->model.onNameChanged(text)}" ... /> android:id="@+id/et_pwd" android:text="@{model.code.get()}" android:onTextChanged="@{model::onPwdChanged}" ... />
属性的引用 如果想使用ViewModel中成员变量,如直接使用model.ld_phone 事件绑定 事件绑定包括方法引用和监听绑定:
方法引用:参数类型和返回类型要一致,参考et_pwdEditTextandroid:onTextChanged引用。监听绑定:相比较于方法引用,监听绑定的要求就没那么高了,我们可以使用自行定义的函数,参考et_accountEditText的android:onTextChanged引用。
表达式 btn_loginButton在密码没有内容的时候是灰色的就是使用的表达式。
运算符 + - / * %字符串连接 +逻辑与或 && ||二进制 & | ^一元 + - ! ~移位 >> >>> <<比较 == > < >= <= (Note that < needs to be escaped as <)instanceofGrouping ()Literals - character, String, numeric, nullCast方法调用域访问数组访问三元操作符
4.生成绑定类并使用
布局文件创建完毕之后,点击Build下面的Make Project,让系统帮我生成绑定类ActivityLoginBinding
然后只需在LoginActivity 中完成绑定即可,绑定操作既可以使用,上述生成的ActivityLoginBinding也可以使用,自带的DataBindingUtil完成:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding: ActivityLoginBinding =DataBindingUtil.setContentView(this, R.layout.activity_login)
}
//DataBinding也支持在Fragment和RecyclerView中使用
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
binding = DataBindingUtil.inflate(inflater, getContentViewId(), container, false);
return binding.getRoot();
}
2.使用生成的ActivitytLoginBinding
binding = ActivitytLoginBinding.inflate(inflater, getContentViewId(), container, false);
文章来源
发表评论