欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

DataBinding onClick的七种点击方式

程序员文章站 2022-05-14 15:24:52
最近在学习databinding的使用,中间遇到了不少的坑,记录以下,帮助以后学习databinding的朋友。 有一个 viewmodel 类,有一个 xml,xml...

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

    }

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。