Ответ 1
OnClick должен вызывать метод Presenter
. Вы должны делать свою работу в презентаторе, и если вам нужно обновить ui, вы должны определить метод в своем View
и вызвать его из презентатора.
Вам нужен метод для View
ex:
public void showCounterCount(final int totalClicks){
counterTextView.setText("Total clicks so far: "+totalClicks);
}
Также вам нужен метод и переменная в Presenter
:
int totalClicks = 0;
public void onCounterButtonClicked(){
totalClicks++;
mView.showCounterCount(totalClicks);
}
И отредактируйте свой код следующим образом:
counterButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mPresenter.onCounterButtonClicked();
}
});
Для более сложной и чистой архитектуры вы можете использовать свой бизнес для использования в интеракторах. (В вашем примере увеличение значения счетчика является прецедентом для вашего приложения)
Вы можете определить интерактора и увеличить его значение счетчика.
CounterInteractor:
public CounterInteractor{
public int incrementCounter(int currentCounter){
return currentCounter+1;
}
}
И реорганизуйте презентатора, как показано ниже:
int totalClicks = 0;
CounterInteractor mCounterInteractor = new CounterInteractor();
public void onCounterButtonClicked(){
totalClicks = mCounterInteractor.incrementCounter(totalClicks);
mView.showCounterCount(totalClicks);
}
При таком подходе вы полностью отделяете свою бизнес-логику от докладчиков и используете свои концепции использования без дублирования кода в презентациях. Это более чистый подход.
Вы также можете проверить этот репозиторий git для разных подходов MVP. https://github.com/googlesamples/android-architecture/tree/todo-mvp-clean/
Удачи.
Edit:
Здесь мой легкий проект проекта клиента wikipedia: https://github.com/savepopulation/wikilight
Я пытаюсь реализовать MVP
. (MVP + Dagger2 + RxJava)