如何修复在绑定组件中单击登录按钮时找不到方法

how to fix cannot find method onLoginButtonClick in binding compoment

我一直在寻找无法找到方法 onLoginButtonClick 或一般 android 数据绑定错误的解决方案我想通过使用绑定和空间在我的应用程序中进行身份验证,所以这是我的代码

注册布局

android:text="@{register.emailEditTextRegisterContext}"
android:text="@{register.passwordEditTextRegisterContext}"
android:onClick="@={()-> register.onButtonLoginRegisterClick(register)}"
android:text="@{register.confirmPasswordTextContext}"
android:text="@{register.nameRegisterContext}"

登录布局

android:text="@{login.emailEditTextContext}"
android:text="@{login.PasswordEditTextContext}"
android:onClick="@={() -> login.onLoginButtonClick(login)}"

注册视图模型

private val _nameRegisterContext = MutableLiveData<String>()
val NameRegisterContext: LiveData<String>
    get() = _nameRegisterContext

private val _emailEditTextRegisterContext = MutableLiveData<String>()
val emailEditTextRegisterContext: LiveData<String>
    get() = _emailEditTextRegisterContext

private val _passwordEditTextRegisterContext = MutableLiveData<String>()
val passwordEditTextRegisterContext: LiveData<String>
    get() = _passwordEditTextRegisterContext

private val _confirmPasswordTextContext = MutableLiveData<String>()
val confirmPasswordTextContext: LiveData<String>
    get() = _confirmPasswordTextContext

private val _registerCompleted = MutableLiveData<Boolean>()
val registerCompleted: LiveData<Boolean>
    get() = _registerCompleted

fun onButtonLoginRegisterClick(view: View){

}

登录布局

private val _emailedittextcontext = MutableLiveData<String>()
val emailEditTextContext: LiveData<String>
    get() = _emailedittextcontext

private val _passwordedittextcontext = MutableLiveData<String>()
val PasswordEditTextContext: LiveData<String>
    get() = _passwordedittextcontext

fun onLoginButtonClick(view : View){
        onLogingin()
    }

错误(每当我尝试解决方案时它都会改变)

[kapt] An exception occurred: android.databinding.tool.util.LoggedErrorException: Found data binding errors.
****/ data binding error ****msg:cannot find method onButtonLoginRegisterClick(com.example.android.trackmysleepquality.register.RegisterViewModel) in class com.example.android.trackmysleepquality.register.RegisterViewModel
file:C:\Users\mehmet\Desktop\andfun-kotlin-sleep-tracker-with-recyclerview\app\src\main\res\layout\register_layout.xml
loc:87:32 - 87:81
****\ data binding error ****
****/ data binding error ****msg:cannot find method onLoginButtonClick(com.example.android.trackmysleepquality.login.Login_ViewModel) in class com.example.android.trackmysleepquality.login.Login_ViewModel
file:C:\Users\mehmet\Desktop\andfun-kotlin-sleep-tracker-with-recyclerview\app\src\main\res\layout\login_layout.xml
loc:76:32 - 76:68
****\ data binding error ****

请帮忙!!

错误:

android:onClick="@={() -> login.onLoginButtonClick(login)}"
android:onClick="@={()-> register.onButtonLoginRegisterClick(register)}"

您正在将 ViewModel 对象传递给这些函数,而不是您想要的视图

右:

android:onClick="@={(view) -> login.onLoginButtonClick()}"
android:onClick="@={(view)-> register.onButtonLoginRegisterClick()}"

参考: Listener Binding in official doc

虽然@Miller Go Dev 发布的答案在一定程度上纠正了您的代码,但仍然不能满足需求。

正确的方法是这样,

android:onClick="@={(view) -> login.onLoginButtonClick(view)}"

android:onClick="@={(view)-> register.onButtonLoginRegisterClick(view)}"

    //pass the view parameter to their respective method

好吧,我所做的只是删除 = 符号以进行数据绑定 one-way

错误:

android:onClick="@={() -> login.onLoginButtonClick(login)}"

右:

android:onClick="@{() -> login.onLoginButtonClick()}"