android:layout_width=“match_parent”
android:layout_height=“match_parent”>
</androidx.constraintlayout.widget.ConstraintLayout>
在activity中,DataBinding直接生成了对应的setter方法。所以可以直接使用setVideoEntity将对象传递给布局类。如下所示:
val videoEntity = VideoEntity()
//绑定实体类
binding.videoEntity = videoEntity
- 绑定布局变量
将对象传递进去直接,就可以通过@{}
直接在布局文件中将对应的变量绑定给控件了
<TextView
android:text=“@{videoEntity.videoName}” />
<TextView
android:text=“@{videoEntity.videoIntroduction}” />
<TextView
android:text=“@{videoEntity.videoStarring}” />
在@{}
中也可以直接使用静态方法
<TextView
android:text=“@{String.valueOf(1)}” />
==================================================================================
通过Button控件,演示DataBinding如何响应onClick事件。
- 创建布局文件转为DataBinding布局
<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”>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”>
</androidx.constraintlayout.widget.ConstraintLayout>
- 声明一个EventHandleListener专门处理点击事件
class EventHandleListener(private val videoEntity:VideoEntity) {
fun onButtonClick1(view: View) {
Toast.makeText(context, “click1”, Toast.LENGTH_SHORT).show()
}
fun onButtonClick2(view: View) {
Toast.makeText(context, “click2”, Toast.LENGTH_SHORT).show()
}
}
- 布局中定义EventHandleListener变量,并将点击事件传递进button。通过双冒号语法
::
进行调用
<variable
name=“eventHandlerLayout”
type=“com.zxf.jetpackrelated.databinding.simpleUse.SimpleDataBindingActivity.EventHandleListener”/>
<Button
android:onClick=“@{eventHandlerLayout::onButtonClick1}”
/>
<Button
android:onClick=“@{eventHandlerLayout::onButtonClick2}”
/>
- activity中将EventHandleListener传递给布局文件
binding.eventHandler = EventHandleListener(videoEntity)
=====================================================================================
简单来说就是怎么将,数据传递到通过<include>
标签包裹的二级页面呢?
下面就将上面的按钮响应事件通过<include>
包裹一下,将EventHandleListener进行一个二级传递。
- 在一级页面定义
<include>
,将上面的按钮布局包裹进来
<include
android:id=“@+id/in_bt”
layout=“@layout/layout_databinding_base” />
- 在一级页面同样声明一下EventHandleListener变量,可以通过二级页面声明的EventHandleListener的name,将对象直接传递给二级页面
<variable
name=“eventHandler”