Android 双向数据绑定仅以一种方式工作

Android two-way data binding working one way only

这个问题困扰我一段时间了,希望有人能帮帮我

我第一次尝试实现双向数据绑定,但我遇到了一个奇怪的问题。

这里的问题是,每次我从视图模型中设置实时数据的值时,UI 都会发生变化,但是当我更改 UI 上的编辑文本值时,它不反映视图模型实时数据值。 似乎 双向 数据绑定仅在 单向 工作,当从视图模型

设置值时

我有我的视图模型,像这样:

class CreateAssignmentViewModel(): ViewModel() {
    val assignment = MutableLiveData<String>()
}

然后我的 activity:

class CreateAssignmentActivity: AppCompatActivity() {
    private val createViewModel: CreateAssignmentViewModel by viewModel()
    private lateinit var viewBinding: ActivityCreateAssignmentBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        viewBinding = DataBindingUtil.setContentView(this, R.layout.activity_create_assignment)
        viewBinding.lifecycleOwner = this
        viewBinding.createViewModel = createViewModel
    }
}

然后在我的 activity xml:

<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>
        <import type="android.view.View" />

        <variable
            name="createViewModel"
            type="com.marcelo.tasks.assignments.create.CreateAssignmentViewModel" />
    </data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context=".assignments.create.CreateAssignmentActivity">

        <EditText
            style="@style/Base.EditText"
            android:text="@{createViewModel.assignment}" />

    </LinearLayout>
</layout>

实际上您并没有在您的视图中设置双向数据绑定。您必须使用 @={} 进行双向数据绑定。检查以下内容:

使用

<EditText
    android:text="@={createViewModel.assignment}" />

而不是

<EditText
    android:text="@{createViewModel.assignment}" />