Jetpack DataBinding(数据绑定库)笔记
程序员文章站
2022-06-08 16:29:24
...
官方文档地址:https://developer.android.google.cn/topic/libraries/data-binding
作用或目的:将数据直接绑定到布局里面,减少了Activity/Fragment的绑定控件操作,听说有助于防止内存泄漏以及避免发生 Null 指针异常。感觉类似于当年写JSP的时候把数据传到了页面。
具体步骤:
首先在Gradle里面集成这个依赖包。
1.在你的项目Module里面首行加入支持:apply plugin: 'kotlin-kapt'
2.在android的配置信息里加入绑定开关:
dataBinding {
enabled true
}
然后在我们的布局的根布局上按下「 ALT+回车」选择 “Convert to data binding layout”选项,就会自动产生相应的布局
变化后的
在data里引入传入的数据,可以直接申明变量,如果多出引用到这个类呢,就引入就好了
<!--直接声明-->
<data>
<variable
name="accountInfo"
type="com.huishine.myjetpack.ui.login.AccountInfo" />
</data>
<!--多处引用-->
<data>
<import type="com.huishine.myjetpack.ui.login.AccountInfo" />
<variable
name="accountInfo"
type="AccountInfo" />
</data>
然后相应的控件就可以使用这个声明为"accountInfo"的变量了,在相应的位置使用"@{accountInfo.data}"这样的样式进行引用,default可以设置默认值
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="com.huishine.myjetpack.ui.login.AccountInfo" />
<variable
name="accountInfo"
type="AccountInfo" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.login.LoginFragment">
<TextView
android:id="@+id/account"
android:layout_width="150dp"
android:layout_height="150dp"
android:gravity="center"
android:text="@{accountInfo.account,default=admin}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
如果有同类名的类,则可以通过别名来引用
<data>
<import type="com.huishine.myjetpack.ui.login.AccountInfo" />
<import
alias="AccountInfo2"
type="com.huishine.myjetpack.ui.main.AccountInfo" />
<variable
name="accountInfo"
type="AccountInfo" />
<variable
name="accountInfo2"
type="AccountInfo2" />
</data>
然后在创建布局的时候进行配置,系统为自动生成一个布局名首写大字母的驼峰类名,如下绑定就可以了
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val binding = DataBindingUtil.inflate<LoginFragmentBinding>(
inflater,
R.layout.login_fragment,
container,
false
)
return binding.root
}
然后赋值就像以下方式就可以了
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val binding = DataBindingUtil.inflate<LoginFragmentBinding>(
inflater,
R.layout.login_fragment,
container,
false
).apply {
accountInfo=AccountInfo("0000", "1111")
}
return binding.root
}
上一篇: WPF中样式继承和简单的触发器
下一篇: ConstraintLayout