java – 无法在android数据绑定中生成click事件
发布时间:2020-12-15 04:48:23 所属栏目:Java 来源:网络整理
导读: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.databind
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 the 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,Toast.LENGTH_SHORT).show(); } } 错误日志 Information:Gradle tasks [:app:clean,:app:generateDebugSources,:app:mockableAndroidJar,:app:prepareDebugUnitTestDependencies,:app:generateDebugAndroidTestSources,:app:assembleDebug] D:ProjectsTrpMvvmTestProjectappsrcmainjavacomespressomvvmtestprojectView.java Error:(8,48) error: package com.espresso.mvvmtestproject.databinding does not exist Error:(15,5) error: cannot find symbol class ActivityMainBinding Error:Execution failed for task ':app:compileDebugJavaWithJavac'. > java.lang.RuntimeException: Found data binding errors. ****/ data binding error ****msg:Listener class android.view.View.OnClickListener with method onClick did not match signature of any method handlers::onShowToast file:D:ProjectsTrpMvvmTestProjectappsrcmainreslayoutactivity_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 解决方法
从类中创建MyHandlers接口.
public class MyHandlers { public void onShowToast(View view); } 在您的Activity或Fragment中实现它,在您的情况下它将如下所示 public class View extends AppCompatActivity implements ViewContract.requiredMethods,MyHandlers{ ViewModel mModel; ActivityMainBinding binding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //Setting the 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,Toast.LENGTH_SHORT).show(); } } 覆盖你的接口方法onShowToast并设置绑定的处理程序,就是这样,你完成了点击事件 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |