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);
}
));
}
}