Android 在对话框片段上保存用户输入后,无法更新父列表
我正在使用MVVM和导航组件构建一个示例应用程序。下面是导航图Android 在对话框片段上保存用户输入后,无法更新父列表,android,android-databinding,android-viewmodel,android-architecture-navigation,android-mvvm,Android,Android Databinding,Android Viewmodel,Android Architecture Navigation,Android Mvvm,我正在使用MVVM和导航组件构建一个示例应用程序。下面是导航图 <navigation 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" android:id="@+id/nav_graph_sample
<navigation 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"
android:id="@+id/nav_graph_sample" app:startDestination="@id/FHomePage">
<fragment
android:id="@+id/FHomePage"
android:name="com.sample.FHomePage"
android:label="layout_home_page" tools:layout="@layout/layout_layout_home_page">
<action
android:id="@+id/action_FHomePage_to_popup"
app:destination="@id/popupDialog"
app:enterAnim="@anim/nav_default_enter_anim"
app:exitAnim="@anim/nav_default_exit_anim"
app:popEnterAnim="@anim/nav_default_pop_enter_anim"
app:popExitAnim="@anim/nav_default_pop_exit_anim"
app:popUpTo="@+id/FHomePage" />
</fragment>
<dialog
android:id="@+id/popupDialog"
android:name="com.sample.PopupDialog"
android:label="layout_pop_up_dialog"
tools:layout="@layout/layout_pop_up_dialog" />
viewModelObj是在弹出对话框中再次启动的主页ViewModel实例
private val viewModelObj by lazy {
ViewModelProviders.of(this, factory).get(FHomePage::class.java)
}
在调试时,单击弹出对话框上的“保存”按钮时,它将表单数据传递给ViewModel,并将值发布到实时数据。但是,recyclerview适配器没有更新列表。你知道什么可能会阻止它吗
或者我需要在从对话框返回主页的导航图上添加一个新操作,并在捆绑包中包含表单数据吗?因此,您的两个片段都使用相同的
ViewModelProviders。关于(工厂)
code?对话框片段是一个简单的表单,其输入数据将由父片段使用,我想尝试一下使用相同的ViewModel。我们需要单独的VM吗?DialogFragment
和Fragements
应该使用HomeViewModel的共享viewmodel实例,使用调试器确保它是相同的实例。
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/list_items"
android:layout_width="match_parent"
android:layout_height="0dp"
app:data="@{viewModel.listItemsLiveData}"
/>
@BindingAdapter("data")
@JvmStatic fun setItems(recyclerView: RecyclerView, resource: List<FormEntity>?) {
with(recyclerView.adapter as CustomListAdapter) {
resource?.let { updateData(it) }
}
}
fun updateData(items: List<FormEntity>) {
this.items.clear()
this.items.addAll(items)
notifyDataSetChanged()
}
btn_save.setOnClickListener {
viewModelObj.saveForm(
value1,
value2
value3
)
dismiss()
}
private val viewModelObj by lazy {
ViewModelProviders.of(this, factory).get(FHomePage::class.java)
}