在片段Android java中初始化ViewModel

Cha*_*kma 1 java android mvvm fragment android-jetpack

我想我的初始化视图模型对象中FirstFragment.java的文件BasicActivity。这四个代码都失败了。文档对我帮助不大。

mViewModel = new ViewModelProvider(this).get(MyViewModel.class);
mViewModel = new ViewModelProvider(requireActivity()).get(MyViewModel.class);
mViewModel = new ViewModelProvider(getActivity()).get(MyViewModel.class);
mViewModel = new ViewModelProvider(FirstFragment.class).get(MyViewModel.class);
Run Code Online (Sandbox Code Playgroud)

另一方面,public ViewModelProvider(@NonNull ViewModelStoreOwner owner)ViewModelProvider 以 ViewModelStoreOwner 为参数,在接口实现的FragmentActivity.java ViewModelStore getViewModelStore()方法中ViewModelStore可能是工厂模式。

@NonNull
        @Override
        public ViewModelStore getViewModelStore() {
            return FragmentActivity.this.getViewModelStore();
        }
Run Code Online (Sandbox Code Playgroud)

帮我初始化 ViewModel

Mus*_*led 6

初始化你的 viewModel 是这样的:

如果你正在使用

implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0'
Run Code Online (Sandbox Code Playgroud)

并初始化您的 viewModel

viewModel = ViewModelProviders.of(this,viewModelFactory).get(MyViewModel.class);
Run Code Online (Sandbox Code Playgroud)

但它现在已被弃用。因此,将依赖项更新为:

implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
Run Code Online (Sandbox Code Playgroud)

并初始化您的 viewModel 如下:

viewModel = new ViewModelProvider(this,viewModelFactory).get(MyViewModel.class);
Run Code Online (Sandbox Code Playgroud)

viewModelFactory 是可选的。