我正在更深入地研究ViewModelProvider,并在ViewModelProvider中找到了 2个get方法,如下所示
@NonNull
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);
}
和
@NonNull
@MainThread
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;
}
第一个很简单,我们通常都使用它。第二个似乎除了ViewModel类实例之外,还要求一个键字符串,它使用该键将ViewModel存储在 ViewModelStore 类内的HashMap中。
现在,ViewModelStore有两种方法,放置和获取,因为您可以期望任何类都可以在HashMap上使用。但这是我的问题,