вернуть экземпляр ViewModel, используя ключ от ViewModelStore - PullRequest
0 голосов
/ 04 июня 2019

Я углублялся в ViewModelProvider и обнаружил 2 методов получения во ViewModelProvider следующим образом

@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 в HashMap внутри ViewModelStore класса.

Теперь ViewModelStoreимеет 2 метода: put и get , так как вы можете ожидать, что любой класс будет работать с HashMap.Но тут возникает мой вопрос:

  1. В каких случаях мне следует использовать второй метод get?
  2. Как вернуть экземпляр ViewModel, используя тот же ключ из ViewModelStore?
  3. В чьём контексте я должен вызывать метод get ViewModelStore?
...