Android ViewModel - 如何在特定配置更改时强制重新创建

6

ViewModel 的目的是在生命周期事件和配置更改时保留数据。

但对于某些配置更改,例如语言环境更改,我希望获得一个新的viewModel实例。我该如何强制进行重建?

class HomeActivity : AppCompatActivity() {

    var viewModelFactory: ViewModelProvider.Factory

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // How to get new instance on locale change?
        var viewModel = ViewModelProviders.of(this, viewModelFactory)
        .get(HomeViewModel::class.java)
    }
}

您可以通过创建自定义的 ViewModelFactory 对象并在其中设置条件来实现该目标,以确定是创建新对象还是使用已有对象。 - Jeel Vankhede
ViewModelProvider.Factory.html#create(java.lang.Class<T>) 在语言更改或任何其他配置更改时不会被调用。 - AndrazP
1
我认为你不能这样做。最好的方法是在你的ViewModel类型上创建自己的reset()函数。 - EpicPandaForce
1个回答

7

回答我自己的问题 :)

我有机会在2019年 Google I/O 上与 Yigit Boyar(Architecture Components 的主管)交谈。
他确认,有意地无法强制重建 ViewModel。正确的解决方案是观察变化并采取相应措施。


所以你基本上需要为每个可重置的视图模型添加一个复位方法。你知道为什么故意不支持这么做吗? - sinalco12

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接