@noob777

Как построить логику архитектуры MVVM в моем приложении?

У меня есть приложение с одной активностью MainActivity.kt и activity_main.xml. Внутри активности есть только EditText, на который я добавил TextChangedListener. который делает запрос API о погоде И вся логика находится в MainActivity.kt. Как мне можно реализовать это с помощью MVVM ? Нужно ли мне как то засунуть логикуTextChangedListener во ViewModel ? Или ViewModel не имеет доступа к View ? Где нужно реализовать и как нужно делать эти запросы в приложении ?
  • Вопрос задан
  • 75 просмотров
Решения вопроса 1
@terminator-light
View может вызывать методы VM.
Но обратно нет.
Например, во View, т.е. в MainActivity у вас есть такой код:
editText.addTextChangedListener(new OnTextChangedListener() {
            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
              //вызываете метод VM
                viewModel.loadWeatherData();
            }
});
//подписываетесь на изменения данных во VM
viewModel.getWeatherData().observe(this, data -> {
          //данные изменились, можно показать тост или сделать что-то другое... Можно показать измененные данные, в конце концов
});

а в VM:
public class WeatherViewModel extends ViewModel {
      private final MutableLiveData<WeatherData> weatherData = new MutableLiveData<>();
      public LiveData<WeatherData> getWeatherData() {
        return checkout;
      }
      public void loadWeatherData(){
            //из своего API получаете данные и изменяете weatherData
            disposable.add(repository.fetchWeatherData() 
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread());
                .subscribe((data, throwable) -> {
                   //при вызове setValue вызывается коллбек у подписчиков на weatherData
                    this.weatherData.setValue(data);
                }
        ));
      }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@tiroman
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы