Android Jetpack 的 SavedStateViewModelFactory 是如何工作的?

xiz*_*izz 8 android android-jetpack

我的 viewmodel-savestate 版本是
implementation 'androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha03'

在 1.0.0-alpha01 版本中,我可以使用

 MyViewModel myVM = new ViewModelProvider(this, new SavedStateVMFactory(this)).get(MyVM.class);

Run Code Online (Sandbox Code Playgroud)

使用 savestate 创建视图模型,但在 1.0.0-alpha03 版本中,

SavedStateVMFactory 
Run Code Online (Sandbox Code Playgroud)

无法工作,我需要使用new SavedStateViewModelFactory但我不知道第二个参数是什么意思,代码可能如下所示:

        myVM = new ViewModelProvider(this, new SavedStateViewModelFactory(getApplication(),xxxxxxx)).get(MyVM.class);

Run Code Online (Sandbox Code Playgroud)

我在 android 开发者网站上找不到任何关于此的文档,很遗憾

ian*_*ake 15

根据SavedStateRegistryOwner文档,FragmentAppCompatActivity实施SavedStateRegistryOwner,因此您可以传入this

 myVM = new ViewModelProvider(this,
     new SavedStateViewModelFactory(getApplication(), this))
     .get(MyVM.class);
Run Code Online (Sandbox Code Playgroud)

只要确保您使用的是 AppCompat 1.1.0,这是AppCompatActivity(及其基类FragmentActivityComponentActivity)开始实现SavedStateRegistryOwner.