简体   繁体   English

Android数据绑定:找不到属性android:onClick的setter

[英]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. 我想我只为视图而不是按钮设置器创建它。

Stacktrace 堆栈跟踪

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.

相关问题 Android数据绑定:无法找到属性的setter - Android Data Binding : can't find the setter for attribute Android数据绑定:找不到属性app:list的setter - Android data binding : Cannot find setter for attribute app:list Android数据绑定BindingAdapter:“找不到设置器” - Android Data Binding BindingAdapter: “Cannot find the setter” android:onClick 属性未通过数据绑定起作用 - android:onClick attribute is not working through data binding AndroidX迁移-数据绑定错误msg:找不到参数类型为int的属性“ android:visibility”的设置器 - AndroidX migration - data binding error msg:Cannot find the setter for attribute 'android:visibility' with parameter type int android:onClick属性停止工作,无法在活动中找到方法 - android:onClick attribute stopped working, can't find method in activity 数据绑定时的自定义属性设置器错误 - Android - custom attribute setter error when data binding - Android 在数据绑定中找不到属性的设置器 - Cannot find the setter for attribute in Data binding 在 android.widget.RelativeLayout 上找不到参数类型为 lambda 的属性“android:onClick”的设置器 - Cannot find the setter for attribute 'android:onClick' with parameter type lambda on android.widget.RelativeLayout Android无法找到我的OnClick方法 - Android can't find my OnClick method
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM