我不明白,当重新创建UI控制器时,创建的ViewModel实例如何存活?
换句话说... 乳清这种方法
ViewModelProviders.of(this).get(MyViewModel.class);
重新调用时是否返回先前退出的ViewModel实例?
答案 0 :(得分:0)
获取(MyViewModel.class)
返回一个现有的ViewModel或在与此相关的范围内创建一个新的ViewModel(通常是一个片段或一个活动)。创建的ViewModel与给定的范围相关联并将被保留 只要范围是活动的(例如,如果它是一项活动,直到它 完成或进程被杀死)
public <T extends ViewModel> T get(@NonNull Class<T> modelClass) {
String canonicalName = modelClass.getCanonicalName();
if (canonicalName == null) {
throw new IllegalArgumentException("Local and anonymous classes can not be ViewModels");
}
return get(DEFAULT_KEY + ":" + canonicalName, modelClass);
}
如果我们进一步探索,具有两个参数的 get(String key,Class modelClass)方法将返回视图模型。您可以在该函数中查看视图模型是否存在,否则它将返回,否则将创建一个新视图。
public <T extends ViewModel> T get(@NonNull String key, @NonNull Class<T> modelClass) {
ViewModel viewModel = mViewModelStore.get(key);
if (modelClass.isInstance(viewModel)) {
//noinspection unchecked
return (T) viewModel;
} else {
//noinspection StatementWithEmptyBody
if (viewModel != null) {
// TODO: log a warning.
}
}
viewModel = mFactory.create(modelClass);
mViewModelStore.put(key, viewModel);
//noinspection unchecked
return (T) viewModel;
}
答案 1 :(得分:0)
经过一番搜索,我发现了这个post,它解释了我的确切需求。