java - Not able to make click event in android data binding -
view.java
package com.espresso.mvvmtestproject; import android.content.context; import android.databinding.databindingutil; import android.support.v7.app.appcompatactivity; import android.os.bundle; import com.espresso.mvvmtestproject.databinding.activitymainbinding; public class view extends appcompatactivity implements viewcontract.requiredmethods{ viewmodel mmodel; activitymainbinding binding; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); //setting layout binding = databindingutil.setcontentview(this, r.layout.activity_main); mmodel=new viewmodel(getcontext()); binding.setuser(mmodel); binding.sethandlers(new myhandlers()); } @override public void ondestroy() { super.ondestroy(); } @override public context getcontext() { return view.this; } }
viewcontract.java
public interface viewcontract { interface requiredmethods{ context getcontext(); } }
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> <variable name="user" type="com.espresso.mvvmtestproject.viewmodel"/> <variable name="handlers" type="com.espresso.mvvmtestproject.myhandlers"/> </data> <linearlayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center" android:gravity="center"> <textview android:layout_width="match_parent" android:layout_height="wrap_content" android:textsize="20sp" android:layout_gravity="center" android:gravity="center" android:textcolor="@android:color/black" android:text="first text"/> <textview android:layout_width="match_parent" android:layout_height="wrap_content" android:textsize="20sp" android:layout_gravity="center" android:gravity="center" android:textcolor="@android:color/black" android:text="second text"/> <button android:text="show toast" android:layout_width="match_parent" android:layout_height="wrap_content" android:onclick="@{handlers::onshowtoast}"/> </linearlayout> </layout>
myhandlers.java
public class myhandlers { public void onshowtoast(view view) { toast.maketext(view,"clicked",toast.length_short).show(); } }
viewmodel.java
public class viewmodel { private context mactivity; public viewmodel(context context) { this.mactivity=context; } public void onshowtoast(view view) { toast.maketext(mactivity,"clicked",toast.length_short).show(); } }
errorlog
information:gradle tasks [:app:clean, :app:generatedebugsources, :app:mockableandroidjar, :app:preparedebugunittestdependencies, :app:generatedebugandroidtestsources, :app:assembledebug] d:\projects\trp\mvvmtestproject\app\src\main\java\com\espresso\mvvmtestproject\view.java error:(8, 48) error: package com.espresso.mvvmtestproject.databinding not exist error:(15, 5) error: cannot find symbol class activitymainbinding error:execution failed task ':app:compiledebugjavawithjavac'. > java.lang.runtimeexception: found data binding errors. ****/ data binding error ****msg:listener class android.view.view.onclicklistener method onclick did not match signature of method handlers::onshowtoast file:d:\projects\trp\mvvmtestproject\app\src\main\res\layout\activity_main.xml loc:40:31 - 40:51 ****\ data binding error **** information:build failed information:total time: 4.396 secs information:3 errors information:0 warnings information:see complete output in console
make myhandlers
intereface class.
public class myhandlers { public void onshowtoast(view view); }
implement in activity
or fragment
, in case follows
public class view extends appcompatactivity implements viewcontract.requiredmethods, myhanders{ viewmodel mmodel; activitymainbinding binding; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); //setting layout binding = databindingutil.setcontentview(this, r.layout.activity_main); mmodel=new viewmodel(getcontext()); binding.setuser(mmodel); binding.sethandlers(this); } @override public void onshowtoast(view view) { toast.maketext(view,"clicked",toast.length_short).show(); } }
override interface method onshowtoast , set handler binding, , that's it, done click events
Comments
Post a Comment