具有正确 xml 绑定的 livedata 变量的 2 路数据绑定错误

Dar*_*ord 5 android viewmodel kotlin android-livedata

我的登录活动有一个 LoginViewModel,位于 Activity_login.xml 中

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <data>
        <variable
            name="loginViewModel"
            type="com.example.test.ui.login.LoginViewModel" />
    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/login_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <EditText
            android:id="@+id/mobile_number"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:editable="true"
            android:ems="10"
            android:hint="@string/mobile_number_string"
            android:inputType="phone"
            android:textAlignment="center"
            android:text="@={loginViewModel.phoneNumber}"
            app:layout_constraintBottom_toTopOf="@+id/otp_input"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>
Run Code Online (Sandbox Code Playgroud)

在我的 loginViewModel 中,我将 livedata 定义为

class LoginViewModel : ViewModel(){
    private val _phoneNumber = MutableLiveData<String>()
    val phoneNumber : LiveData<String>
        get() = _phoneNumber
}
Run Code Online (Sandbox Code Playgroud)

现在,在构建时我收到以下错误

The expression \u0027loginViewModelPhoneNumber.getValue()\u0027 cannot be inverted, so it cannot be used in a two-way binding\n\nDetails: There is no inverse for method getValue, you must add an @InverseMethod annotation to the method to indicate which method should be used when using it in two-way binding expressions
Run Code Online (Sandbox Code Playgroud)

我正在阅读的所有文章都建议采用这种方式来实现。有人可以告诉我我在这里做错了什么吗?

小智 2

改变自

private val _phoneNumber = MutableLiveData<String>()
Run Code Online (Sandbox Code Playgroud)

public val _phoneNumber = MutableLiveData<String>()
Run Code Online (Sandbox Code Playgroud)