如何解决无法在绑定组合中找到onLoginButtonClick方法

时间:2019-07-13 14:35:34

标签: android kotlin mvvm binding android-databinding

我被困在无法找到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)}"

registerViewModel

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 ****

请帮助!

3 个答案:

答案 0 :(得分:0)

错误:

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

您要将ViewModel对象传递给这些函数,而不是根据需要传递View

右:

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

参考Listener Binding in official doc

答案 1 :(得分:0)

尽管@Miller Go Dev发布的答案在某种程度上纠正了您的代码,但仍不能满足需求。

正确的方法是这样

getAPI

答案 2 :(得分:0)

好吧,我要做的就是删除=符号,使数据绑定成为单向绑定

错误:

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

右:

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