Я пытаюсь реализовать двустороннее связывание данных в моем приложении 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 исчез.
Что не так с моим кодом? Я что-то упускаю или неправильно понимаю, как работает привязка данных?