我正在尝试在我的android应用程序上实现双向数据绑定,它由一个MainActivity
组成,其中包含两个片段(NewTravelFragment
和DateNewTravelFragment
)。
我想使用由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中的文本就消失了。
我的代码有什么问题?我是否缺少某些东西,或者我误解了数据绑定的工作原理?