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