服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Android - DataBinding onClick的七种点击方式

DataBinding onClick的七种点击方式

2022-10-24 14:04CicadaMay Android

这篇文章主要给大家介绍了关于DataBinding onClick的七种点击方式,文中通过示例代码介绍的非常详细,对各位Android开发者们具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

最近在学习DataBinding的使用,中间遇到了不少的坑,记录以下,帮助以后学习DataBinding的朋友。

有一个 ViewModel 类,有一个 xml,xml 绑定了 ViewModel .

1. @{click}

?
1
2
3
4
5
6
7
8
9
10
11
//xml:
<Button
   android:layout_width="match_parent"
   android:layout_height="48dp"
   android:onClick="@{click}"
/>
 
//ViewModel:
public void click(View view){
 
}

2. 不带参数:@{() -> viewModel.click()}

?
1
2
3
4
5
6
7
8
9
10
11
//xml:
<Button
   android:layout_width="match_parent"
   android:layout_height="48dp"
   android:onClick="@{() -> viewModel.click()}"
/>
 
//ViewModel:
public void click(){
 
}

3. @{viewModel::click}

?
1
2
3
4
5
6
7
8
9
10
11
//xml:
<Button
   android:layout_width="match_parent"
   android:layout_height="48dp"
   android:onClick="@{viewModel::click}"
/>
 
//ViewModel:
public void click(View view){
 
}

tip: 如果是在其它类中设置点击方法,如 EventHandlers.java, 其实与上面一致

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//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)}

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//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>

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//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. 带参数

?
1
2
3
4
5
android:onClick="@{()->loadingModel.chooseLang(2)}"
public void chooseLang(int language) {
   LogUtil.i(TAG, "language=" + language);
 
}

7. 带view的参数

?
1
2
3
4
5
6
7
8
9
10
11
12
//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

延伸 · 阅读

精彩推荐