ViewModel за сценой - PullRequest
       37

ViewModel за сценой

0 голосов
/ 15 октября 2018

Я не понимаю, Как создается экземпляр ViewModel, когда контроллер UI воссоздается?

Другими словами ... для чего этот метод

ViewModelProviders.of(this).get(MyViewModel.class);

возвращает предыдущий выходящий экземпляр ViewModel при повторном вызове?

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

После хорошего поиска я нашел запись , которая объясняет, что мне нужно точно ..

0 голосов
/ 15 октября 2018

get (MyViewModel.class)

Возвращает существующую 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;
    }

Вот ссылка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...