Android具有共享模型的双向数据绑定

时间:2020-04-05 21:25:45

标签: android android-fragments kotlin viewmodel android-jetpack

我正在尝试在我的android应用程序上实现双向数据绑定,它由一个MainActivity组成,其中包含两个片段(NewTravelFragmentDateNewTravelFragment)。

我想使用由MainActivity创建并由片段使用的ViewModel。

在编写代码之前,我使用启用了两个数据绑定

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并按next,则应该能够将值放入第二个片段中。

第一个片段布局如下:

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

好吧..什么都行不通,如果我写点东西,我什么都不会进入下一个片段,如果回到第一个片段,EditText中的文本就消失了。

我的代码有什么问题?我是否缺少某些东西,或者我误解了数据绑定的工作原理?

0 个答案:

没有答案