繁体   English   中英

如何从 getIntent 为 EditActivity 的视图模型设置第一个值

[英]How do I set first values to the viewmodel of EditActivity from getIntent

我有一个 recyclerview 包含有关水果的信息行,如名称、颜色、重量、描述、匹配的食物......

如果我单击一个按钮,它应该将这些行值加载到 Intent 中,并将我带到 startActivityForResult: EditActivity。

好吧,视图模型的原因是防止旋转将值重置回 getIntent 中的值。 值仅在 mainactivity onreturnresultsomething... 方法中更新为 sql。

如果我在 mainactivity oncreate 中执行 '''mviewmodel.name = intent.getStringExtra(name,""):''',那只会在旋转时覆盖它,就好像根本没有视图模型一样。

我正在考虑使用共享首选项,但有更好的方法,而 androidviewmodel 是一种反模式。

因此,从 getintent 开始,我如何将默认值添加到编辑活动中的视图模型,并且它不会在旋转时设置回原来的值?

谢谢大家!

将您的值放在 [SavedStateHandle] 上: https : //developer.android.com/reference/androidx/lifecycle/SavedStateHandle

mviewmodel.savedStateHandle.set("name",name)

在设置值之前,请检查它是否为空,例如:

if(mviewmodel.savedStateHandle.get("name) == null){
   mviewmodel.savedStateHandle.set("name",name)
}

您可以从这里查看: https : //developer.android.com/topic/libraries/architecture/viewmodel-savedstate

如果您使用当前的by viewModels或底层的ViewModelProvider模式,您的 ViewModel 将不会被重新创建,因此您可以将其添加为构造函数参数。

查看ViewModelProvider.Factory了解如何做到这一点。 此外,如果您打算使用 Dagger,但仍有参数,您想手动传入,您可以查看此库: https : //github.com/halcyonmobile/ViewModelFactoryGenerator

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM