DataBinding onClick的七种点击方式
作者:CicadaMay 发布时间:2021-12-08 01:23:22
标签:databinding,onclick,点击
最近在学习DataBinding的使用,中间遇到了不少的坑,记录以下,帮助以后学习DataBinding的朋友。
有一个 ViewModel 类,有一个 xml,xml 绑定了 ViewModel .
1. @{click}
//xml:
<Button
android:layout_width="match_parent"
android:layout_height="48dp"
android:onClick="@{click}"
/>
//ViewModel:
public void click(View view){
}
2. 不带参数:@{() -> viewModel.click()}
//xml:
<Button
android:layout_width="match_parent"
android:layout_height="48dp"
android:onClick="@{() -> viewModel.click()}"
/>
//ViewModel:
public void click(){
}
3. @{viewModel::click}
//xml:
<Button
android:layout_width="match_parent"
android:layout_height="48dp"
android:onClick="@{viewModel::click}"
/>
//ViewModel:
public void click(View view){
}
tip: 如果是在其它类中设置点击方法,如 EventHandlers.java, 其实与上面一致
//xml:
<variable
name="handler"
type="com.xx.xxx.EventHandlers" />
<Button
android:layout_width="match_parent"
android:layout_height="48dp"
android:onClick="@{handler::click}" />
// UI类:绑定handler,如绑定ViewModel那样
EventHandlers handler = new EventHandlers();
binding.setHandler(handler);
// EventHandlers 执行click事件
public void click(View view){
//do
}
4. 带参数:@{() -> viewModel.click(obj.id)}
//xml:
<variable
name="viewModel"
type="com.xx.xxx.ViewModel" />
<variable
name="obj"
type="com.xx.xxx.User" />
<Button
android:layout_width="match_parent"
android:layout_height="48dp"
android:onClick="@{() -> viewModel.click(obj.id)}"
/>
//ViewModel:
public void click(long id){
//do
}
5. ObservableField<OnClickListener>
//xml:
<variable
name="iconView"
type="com.xxxxx.IconView" />
<RelativeLayout
android:id="@+id/rl_icon_view"
android:layout_width="match_parent"
android:layout_height="55dp"
android:onClick="@{iconView.clickListener}"
>
//IconView:
public final ObservableField<OnClickListener> clickListener=new ObservableField<>();
//xml所在的Activity类:
binding.iconView.clickListener.set(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getApplicationContext(),"iconView",Toast.LENGTH_SHORT).show();
}
});
6. 带参数
android:onClick="@{()->loadingModel.chooseLang(2)}"
public void chooseLang(int language) {
LogUtil.i(TAG, "language=" + language);
}
7. 带view的参数
//xml:
<variable
name="listener"
type="test.carrie.todomvvmtest.ui.OnTaskItemListener"/>
android:onClick="@{(view)->listener.onCheckBoxClick(obj,view)}"
//adapter:
public void onCheckBoxClick(ToDo entity, View v) {
}
来源:https://blog.csdn.net/ygzrsno/article/details/80117721
0
投稿
猜你喜欢
- JNA(Java Native Access):建立在JNI之上的Java开源框架,SUN主导开发,用来调用C、C++代码,尤其是底层库文件
- Java与C++实现相同的MD5加密算法1、Java版package com.lyz.utils.common;import java.io
- 目录Java 中线程池创建的几种方式🐱🏍Executors 工厂方法创建👏 new ThreadPoolExecutor() 自
- 整理文档,搜刮出一个spring boot实现过滤器和 * demo ,稍微整理精简一下做下分享。 * 定义:@WebServletpubl
- 先看看效果Like This↓一、公共WiFi 公用电脑什么的在我们日常在线上工作、玩耍时,不论开电脑、登录淘宝、玩网游统统都会用到键盘输入
- 前言通常在工作中比较常用到的Microsoft Word是属于国外的文档内容编辑软件,其编译技术均属国外。而OFD是一种我国的自主文档格式,
- 一、堆的概念堆的定义:n个元素的序列{k1 , k2 , … , kn}称之为堆,当且仅当满足以下条件时:(1)ki
- java操作json对象出现StackOverflow错误今天在做项目的时候,遇到一个非常怪异的问题。一个java实体类中存在多个属性,每一
- C# char类型有自带的大小写转换方法:ToUpper和ToLowerchar str1 = 'a';char str2
- 完成一个简单的基于MVC的数据查询模块,要求能够按照name进行模糊查询。Index.jsp:<%@ page import=&quo
- 前言随着网络技术的发展、计算机应用水平广泛提高,原来系统的时效性、数据的正确性、操作的方便性上都存在不足,已影响到系统的正常使用。经过考察比
- 前言因为工作原因,需要在项目中集成dubbo,所以去查询dubbo相关文档,发现dubbo目前已经不更新了,所以把目光投向了dubbox,d
- JVM的对dll文件的装载过程操作系统装入JVM是通过jdk中Java.exe来完成,通过下面4步来完成JVM环境.1.创建JVM装载环境和
- 本文实例讲述了Spring实战之ResourceLoader接口资源加载用法。分享给大家供大家参考,具体如下:一 代码package lee
- 前言记一次为了节省代码没有在方法体中声明HttpServletRequest,而用autowire直接注入所钻的坑结论:给心急的人。 直接在
- 平时开发,基本不改变的常量我们都放在了配置项里,如properties或yml文件里,这个时候为了只在启动时候进行加载。如何做呢?我们通过s
- 说明本文主要配置Jackson对Long、Date、LocalDate、LocalDateTime的序列化和反序列化。由于js中整数可精确表
- 项目要求1.初次打开程序时右上角标题栏显示“无连接”,点击旁边的按钮选择“我的好友”,进入配对界面;2.选择好友之后,返回主界面,标题栏会显
- RocketMQ生产者发送消息分为三种模式RocketMQ生产者发送消息分为三种模式,分别是同步发送,异步发送和单向发送。单向发送,这个就是
- 使用spring redis的increment方法时,报错:nested exception is redis.clients.jedis