Android Двухстороннее связывание данных с общей моделью - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь реализовать двустороннее связывание данных в моем приложении android, и оно состоит из MainActivity, который содержит два фрагмента (NewTravelFragment и DateNewTravelFragment).

Я хочу использовать ViewModel, созданную MainActivity и используемую фрагментами.

Перед написанием своего кода я включил привязку двух данных, используя

dataBinding {
        enabled = true
    }

внутри моего build.gradle

В MainActivity viewModel создается с помощью:

val model by lazy{ ViewModelProvider(viewModelStore, defaultViewModelProviderFactory).get(TravelModel::class.java) }

Каждый фрагмент извлекает модель с помощью:

val model : TravelModel by activityViewModels()

И для реализации двусторонней привязки данных в каждом фрагменте onCreateView метод, который я добавил:

_binding = FragmentNewTravelBinding.inflate(inflater, container, false)
binding.model = model
binding.lifecycleOwner = viewLifecycleOwner
return binding.root

ViewModel содержит:

var newTravel = MutableLiveData<Travel>()

Теперь, когда все должно быть установлено, если я что-то записываю в EditText из первого фрагмента и нажимаю затем я смогу получить значение во втором фрагменте.

Первый фрагмент макета выглядит следующим образом:

<?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="model"
            type="com.vlabs.triphunt.ui.TravelModel" />
    </data>
 <EditText
            android:id="@+id/nameTravelEditText"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:hint="@string/travel_name"
            android:layout_marginTop="16dp"
            android:text="@={model.newTravel.title}"
            app:layout_constraintEnd_toEndOf="@+id/titleTextView"
            app:layout_constraintStart_toStartOf="@+id/titleTextView"
            app:layout_constraintTop_toBottomOf="@+id/titleTextView" />
</layout>

Макет второго фрагмента такой же, с TextView с атрибутом android:text="@={model.newTravel.title}"* 103 2 *

Ну ... ничего не работает, если я что-то пишу, я не получаю ничего в следующий фрагмент, и если я go возвращаюсь к первому, текст в EditText исчез.

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

...