DataBinding onClick的七种点击方式

作者:CicadaMay 时间:2021-12-08 01:23:22 

最近在学习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

标签:databinding,onclick,点击
0
投稿

猜你喜欢

  • SpringMVC的执行过程浅析

    2021-05-31 20:51:11
  • 在Spring中自动装配Bean的属性

    2022-01-29 07:01:28
  • java读写oracle的blob字段示例

    2023-12-22 16:19:00
  • IDEA入门级使用教程你居然还在用eclipse?

    2022-03-27 07:35:19
  • Spring JPA之save方法示例详解

    2023-09-06 15:50:35
  • java实现航空用户管理系统

    2023-11-24 02:42:37
  • mybatis新手快速入门以及一些错误汇总

    2023-01-25 13:01:14
  • 解决SpringMvc中普通类注入Service为null的问题

    2023-10-29 01:23:25
  • SpringBoot整合Redis将对象写入redis的实现

    2023-07-30 14:39:07
  • MyBatis基础支持DataSource实现源码解析

    2023-01-16 09:58:07
  • 聊聊@RequestBody和Json之间的关系

    2023-11-27 03:31:45
  • Java异常 Factory method'sqlSessionFactory'rew exception;ested exception is java.lang.NoSuchMethodError:

    2022-03-25 15:06:42
  • Java仿12306图片验证码

    2022-09-29 05:36:08
  • Spring Boot 中application.yml与bootstrap.yml的区别

    2023-07-09 12:30:56
  • java数据库唯一id生成工具类

    2023-04-04 22:53:34
  • Java实现带图形界面的聊天程序

    2022-04-25 22:41:55
  • HTTP基本认证(Basic Authentication)的JAVA实例代码

    2022-06-08 13:03:32
  • java微信支付接入流程详解

    2023-07-28 18:37:46
  • C# 微信支付回调验签处理的实现

    2021-07-27 01:57:34
  • 关于Java双大括号{{}}的具体使用

    2021-05-28 16:32:01
  • asp之家 软件编程 m.aspxhome.com