开发者社区> 问答> 正文

如何使用新的ViewModel保存状态模块

我正在使用生命周期版本2.2.0-rc03,发现的官方文档和文章甚至没有列出正确的类名或构造函数参数。我想我必须通过这样的东西来获取ViewModel实例


viewModel = ViewModelProvider(this, SavedStateViewModelFactory(requireActivity().application, savedStateRegistryOwner))
            .get(SelectedTracksViewModel::class.java)

但我不知道SavedStateRegistryOwner。

有人可以举一个简单的示例,说明如何创建保存的状态ViewModel实例以及在ViewModel中保存和恢复值的正确方法吗?

展开
收起
Puppet 2020-01-12 11:47:15 958 0
1 条回答
写回答
取消 提交回答
  • 据我了解,您想使用spec构造函数创建View模型。您可以使用

    
    ViewModelProvider.Factory。
    
    viewModel = ViewModelProvider(this, SavedStateViewModelFactory.create(state)
                .get(SelectedTracksViewModel::class.java)
    

    ViewModelFactory的示例

    public class SavedStateViewModelFactory {
    
        public static <E> ViewModelProvider.Factory create(State state){
    
            return new ViewModelProvider.Factory() {
                @NonNull
                @Override
                @SuppressWarnings("unchecked")
                public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
                    if (modelClass.isAssignableFrom(SelectedTracksViewModel.class)) {
                        return (T) new SelectedTracksViewModel<>(state);
                    } else {
                        throw new IllegalArgumentException("Unknown ViewModel class");
                    }
                }
            };
        }
    
    }
    
    2020-01-12 11:47:49
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
fibjs 模块重构从回调到协程--陈垒 立即下载
fibjs 模块重构从回调到协程 立即下载
ui-model,跨框架复用 立即下载