Для чего нужна Factory в ViewModel?

136
20 августа 2019, 04:10

Подскажите пожалуйста только изучаю андроид. Я так понял, если говорить проще ViewModel нужна, что бы восстановить инфу во время работы с приложением к примеру во время поворота экрана, но что делает Factory который мы расширяем из extends ViewModelProvider.NewInstanceFactory?

Answer 1

Допустим вы хотите передать во ViewModel какой-то аргумент, например, строку. С помощью обычного способа через конструктор у вас не получится, так как вы должны получать ViewModel вот так.

MyViewModel myViewModel = ViewModelProvider.of(this).get(MyViewModel.class);

Чтобы передать аргумент нужно использовать фабрику. Например, вот так. Создаем экземпляр фабрики и через конструктор передаем наше значение name.

 public class ModelFactory extends ViewModelProvider.NewInstanceFactory {
   private String name;
   public ModelFactory(String name) {
       super();
       this.name = name;
   }
   @NonNull
   @Override
   public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
       if (modelClass == MyViewModel.class) {
           return (T) new MyViewModel(name);
       }
       return null;
   }
}

Теперь мы можем создать ViewModel и передать в нее параметр. Делается это вот так

MyViewModel model = ViewModelProviders.of(this, new ModelFactory("Android")).get(MyViewModel.class);
READ ALSO
Как получить папку из ресурсов

Как получить папку из ресурсов

Spring Boot приложениеВызываю в нем командную строку:

120
Фильтр списка по коллекции строк

Фильтр списка по коллекции строк

Необходимо отфильтровать список пользователей по списку параметров, пример

117