Android двусторонняя привязка данных работает только в одну сторону - PullRequest
0 голосов
/ 08 января 2020

У меня возникла эта проблема на некоторое время, надеюсь, кто-нибудь может мне помочь

Я впервые пытаюсь реализовать двустороннее связывание данных, но сталкиваюсь со странной проблемой.

Проблема здесь в том, что каждый раз, когда я устанавливаю значение живых данных из моей модели представления, пользовательский интерфейс изменяется, но когда я изменяю значение редактирования текста в пользовательском интерфейсе, это не отражается на модели представления значение данных в реальном времени. Похоже, что двусторонняя привязка данных работает только односторонняя , когда значение установлено из модели представления

У меня есть модель представления, что-то вроде это:

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

затем моя деятельность:

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

и затем моя деятельность 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>

image showing that its not working

1 Ответ

1 голос
/ 08 января 2020

На самом деле вы не установили двустороннюю привязку данных в своем представлении. Вы должны использовать @={} для двухсторонней привязки данных. Проверьте ниже:

Используйте

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

Вместо

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