Jetpack:DataBinding超详细指南-Kotlin版!

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)}” />

DataBinding响应事件

==================================================================================

通过Button控件,演示DataBinding如何响应onClick事件。

  • 创建布局文件转为DataBinding布局
<?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”>

<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)

DataBinding二级页面的绑定

=====================================================================================

简单来说就是怎么将,数据传递到通过<include>标签包裹的二级页面呢?

下面就将上面的按钮响应事件通过<include>包裹一下,将EventHandleListener进行一个二级传递。

  • 在一级页面定义<include>,将上面的按钮布局包裹进来

<include

android:id=“@+id/in_bt”

layout=“@layout/layout_databinding_base” />

  • 在一级页面同样声明一下EventHandleListener变量,可以通过二级页面声明的EventHandleListener的name,将对象直接传递给二级页面

<variable

name=“eventHandler”

  • 18
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值