[英]Android data binding: can't find setter for attribute android:onClick
I'm getting this error: 我收到此错误:
Cannot find the setter for attribute 'android:onClick' with parameter type android.view.View.OnClickListener on android.widget.Button.
在android.widget.Button上找不到参数类型为android.view.View.OnClickListener的属性“ android:onClick”的设置器。 file:/home/itstym/ApkProjects/Reminder/app/src/main/res/layout/activity_main.xml loc:54:27 - 54:61
文件:/home/itstym/ApkProjects/Reminder/app/src/main/res/layout/activity_main.xml loc:54:27-54:61
activity.main.xml
<data class="ActivityMainBinding">
<variable
name="login"
type="com.example.itstym.reminder.loginViewModel" />
<variable
name="handler"
type="com.example.itstym.reminder.LoginHandler" />
</data>
<Button
android:onClick="@{(v) -> handler.onLoginButtonClicked(v,login)}"
android:id="@+id/submit_button"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginStart="16dp"
android:layout_marginTop="24dp"
android:text="Sign In"
app:layout_constraintEnd_toEndOf="@+id/user_password"
app:layout_constraintStart_toStartOf="@+id/user_password"
app:layout_constraintTop_toBottomOf="@+id/user_password"/>
MainActivity.java
val handler= LoginHandler(this@MainActivity)
LoginHandler.kt
class LoginHandler(context:Context) {
fun onLoginButtonClicked(view:View, userInfo: loginViewModel) {
Log.i("Email is ", userInfo.userEmailAddress)
Log.i("Password is ", userInfo.userPassword)
}
}
How do I create the setter for the button here? 如何在此处为按钮创建设置器? I think I am creating it only for the view, but not for the button setter.
我想我只为视图而不是按钮设置器创建它。
at android.databinding.tool.processing.Scope.assertNoError(Scope.java:112)
at android.databinding.annotationprocessor.ProcessDataBinding.process(ProcessDataBinding.java:91)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:794)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$200(JavacProcessingEnvironment.java:91)
at com.sun.tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors$ProcessorStateIterator.runContributingProcs(JavacProcessingEnvironment.java:627)
at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1033)
at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1198)
at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1170)
at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1068)
at org.jetbrains.kotlin.kapt3.AnnotationProcessingKt.doAnnotationProcessing(annotationProcessing.kt:73)
Any leads will help! 任何线索都会有所帮助!
Your xml
should be like this 您的
xml
应该是这样的
<data class="ActivityMainBinding">
<variable
name="login"
type="com.example.itstym.reminder.loginViewModel" />
<variable
name="handler"
type="com.example.itstym.reminder.MainActivity" />
</data>
<Button
android:onClick="@{(v) -> handler.onLoginButtonClicked(v, login)}"
android:id="@+id/submit_button"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:layout_marginStart="16dp"
android:layout_marginTop="24dp"
android:text="Sign In"
app:layout_constraintEnd_toEndOf="@+id/user_password"
app:layout_constraintStart_toStartOf="@+id/user_password"
app:layout_constraintTop_toBottomOf="@+id/user_password"/>
You can directly get this onClick
in your MainActivity
. 您可以在
MainActivity
直接获取此onClick
。 There is no need to create a separate class. 无需创建单独的类。
MainActivity.java MainActivity.java
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
binding.setHandler(this);
Then in MainActivity
you can access this method like: 然后,在
MainActivity
您可以像下面这样访问此方法:
public void onLoginButtonClicked(View view, LoginViewModel model) {
//Do something
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.