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) { }
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。
下一篇: 可怜的杜甫