Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 进程终止后恢复共享ViewModel时出现问题_Android_Android Viewmodel_Android Mvvm_Navigation Architecture - Fatal编程技术网

Android 进程终止后恢复共享ViewModel时出现问题

Android 进程终止后恢复共享ViewModel时出现问题,android,android-viewmodel,android-mvvm,navigation-architecture,Android,Android Viewmodel,Android Mvvm,Navigation Architecture,到目前为止我所拥有的 订单列表屏幕:显示订单列表。单击订单时,将显示与订单关联的产品列表 类OrderListFragment:Fragment(){ //跳过不相关的代码 覆盖已创建的视图(视图:视图,保存状态:捆绑?){ //跳过不相关的代码 recyclerView.adapter=适配器(订单列表){order-> //当在订单列表中单击某个项目时,将调用此函数。 findNavController() .navigate(R.id.order\u product\u图,ProductL

到目前为止我所拥有的

订单列表屏幕:显示订单列表。单击订单时,将显示与订单关联的产品列表

类OrderListFragment:Fragment(){ //跳过不相关的代码 覆盖已创建的视图(视图:视图,保存状态:捆绑?){ //跳过不相关的代码 recyclerView.adapter=适配器(订单列表){order-> //当在订单列表中单击某个项目时,将调用此函数。 findNavController() .navigate(R.id.order\u product\u图,ProductListFragment.constructArguments(order)) } } } 与所有这些关联的导航图。


产品列表屏幕:显示与订单关联的产品列表。获取参数束中的
顺序

class-ProductListFragment:Fragment(){
//跳过不相关的代码
lateinit var viewModel:ProductListViewModel
覆盖已创建的视图(视图:视图,保存状态:捆绑?){
//跳过不相关的代码
val order=参数?.getSerializable(键顺序)作为ShopperOrder
viewModel=ViewModelProvider(
findNavController().getViewModelStoreOwner(R.id.order\u item\u graph),//此viewmodel将与ProductFragment共享,因此使用嵌套图作为存储所有者。
ProductListViewModelFactory(order)//注意,此viewModel采用order参数
).get(ProductListViewModel::class.java)
viewModel.products.observe(viewLifecycleOwner,Observer{products->
//当在产品列表中单击产品时,将调用此函数
viewBinding.recyclerView.adapter=ProductListAdapter(产品){product->
findNavController()
.navigate(R.id.productFragment、productFragment.constructArguments(产品))
}
}
}
}
产品屏幕:显示产品详细信息。此处有一个下拉列表,用于选择产品是否可用、缺货、已删除、已更换等。此屏幕应将下拉列表中的数据发送到ProductList屏幕,在该屏幕上更新列表以显示此数据**

class-ProductFragment:Fragment(){
//跳过不相关的代码
lateinit var parentViewModel:ProductListViewModel
lateinit var viewModel:ProductViewModel
lateinit var产品:产品
覆盖已创建的视图(视图:视图,保存状态:捆绑?){
//跳过不相关的代码
product=arguments?.getSerializable(KEY_product)作为产品
parentViewModel=ViewModelProvider(
findNavController().getViewModelStoreOwner(R.id.order\u item\u graph),//此viewmodel将与ProductListFragment共享,因此使用嵌套图作为存储所有者。
).get(ProductListViewModel::class.java)
//在进程死亡后尝试获取共享ProductListViewModel时,此处发生崩溃。请阅读下面的详细信息
//此ViewModel将ProductListViewModel作为parentViewModel参数
viewModel=ViewModelProvider(这是ProductViewModel.Factory(product,parentViewModel)).get(ProductViewModel::class.java)
}
fun productStatusSelected(状态:字符串){
parentViewModel.updateProductStatus(产品,状态)
findNavController().popBackStack()
}
}
场景 订单列表>产品列表>产品>点击主页按钮>做了一堆其他事情>返回应用程序>崩溃

发生的情况是,当ProductFragment重新创建代码以获取调用的共享ProductListViewModel时,ProductListViewModel应采用此处未提供的order param,并与InstanceionException一起崩溃。类ItemListViewModel没有零参数构造函数

错误信息非常清楚,我想知道我应该在这里使用什么策略来使ViewModel工作