Передача параметра во вьюмодель

      RecyclerView recycler_view = findViewById(R.id.recycler_view);
    LinearLayoutManager layoutManager = new LinearLayoutManager(this);
     hoursAdapter = new HoursAdapter(hoursArrayList);
     
     hoursViewModel = new ViewModelProvider(this).get(HoursViewModel.class);
     
    }
     
    public void click(View view){
    getDates("1");
    }

Подскажите,как передать параметр в hoursViewModel? Именно при клике.Пробовал через фабрику, ни в какую при клике не хочет


Ответы (2 шт):

Автор решения: iramm

Во ViewModel нужно создать поле, хранящее параметр. И обращаться к нему нужно через методы ViewModel. Что-то вроде:

public HoursViewModel extends ViewModel {
   private int parameter;
   public void setParameter(int p) {
       this.parameter = p;
   }
   public int getParameter() {
        return parameter;} 
}

А по клику нужно вызвать метод: hoursViewModel.setParameter(1);

→ Ссылка
Автор решения: Олег Никифоров

Через фабрику получилось.Видимо изначально где то ошибка была.

    public class LoginEmailModelFactory extends ViewModelProvider.NewInstanceFactory{
     private final String param;
     public LoginEmailModelFactory(String param) throws Exception {
      super();
      this.login = param;
     }
     @NonNull
     @Override
     public <T extends ViewModel> T create(Class<T> modelClass) {
    
      if (modelClass == LoginEmailViewModel.class) {
    
       try {
        return (T) new LoginEmailViewModel(param);
       } catch (Exception e) {
        throw new RuntimeException(e);
       }
      }
      return null;
     }

}
→ Ссылка