In MVP è responsabilità onClick di Visualizza o Presenter?

Nel pattern MVP chi è responsabile della gestione dei clic sull’interfaccia utente?
Ad esempio l’approccio non MVP sarebbe qualcosa di simile:

counterButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { totalClicks++; counterTextView.setText("Total clicks so far: "+totalClicks); } }); 

L’uso di MVP è onClick la responsabilità del Presenter ? O la View può gestirlo?
Qualcuno può chiarire questo?

OnClick dovrebbe chiamare un metodo Presenter . Dovresti fare i tuoi affari in relatore e se hai bisogno di aggiornare l’interfaccia utente, devi definire un metodo nella tua View e chiamarlo dal presentatore.

Hai bisogno di un metodo per la tua View ex:

 public void showCounterCount(final int totalClicks){ counterTextView.setText("Total clicks so far: "+totalClicks); } 

Inoltre hai bisogno di un metodo e una variabile nel tuo Presenter :

 int totalClicks = 0; public void onCounterButtonClicked(){ totalClicks++; mView.showCounterCount(totalClicks); } 

E rifatta il tuo codice in questo modo:

 counterButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { mPresenter.onCounterButtonClicked(); } }); 

Per un’architettura più complessa e pulita, puoi fare il tuo caso d’uso aziendale negli ambienti interattivi. (Nel tuo esempio l’incremento di un valore contatore è un caso d’uso per la tua applicazione)

È ansible definire un interactor e incrementare il valore del contatore lì.

CounterInteractor:

 public CounterInteractor{ public int incrementCounter(int currentCounter){ return currentCounter+1; } } 

E rifatti il ​​tuo presentatore come di seguito:

 int totalClicks = 0; CounterInteractor mCounterInteractor = new CounterInteractor(); public void onCounterButtonClicked(){ totalClicks = mCounterInteractor.incrementCounter(totalClicks); mView.showCounterCount(totalClicks); } 

Con questo approccio separa totalmente la tua logica di business dai presentatori e riutilizzi i concetti del caso d’uso senza duplicare il codice nei relatori. Questo è un approccio più pulito.

È inoltre ansible controllare questo repository git per diversi approcci MVP. https://github.com/googlesamples/android-architecture/tree/todo-mvp-clean/

In bocca al lupo.

Modificare:

Ecco la mia sorgente del progetto client wikipedia leggera: https://github.com/savepopulation/wikilight

Sto cercando di implementare MVP . (MVP + Dagger2 + RxJava)

In MVP, è responsabilità della vista sapere come acquisire il clic, non decidere cosa fare su di esso. Non appena la Vista cattura il clic, deve chiamare il metodo pertinente nel Presenter per agire su di esso:

——————- Vista ——————–

 button1.setOnClickListener(new OnClickListener({ presenter.doWhenButton1isClicked(); })); 

—————— Presentatore —————-

 public void doWhenButton1isClicked(){ // do whatever business requires } 

Ho una serie di articoli sui modelli architettonici in Android, la cui parte 3 riguarda MVP. Potresti trovarlo utile.