package com.marcosholgado.daggerplayground; import android.app.Activity; import android.os.Bundle; public class PresenterExample { public interface View {} public interface Presenter { void attachView(V view); void detachView(); } public class BasePresenter implements Presenter { V view; public void attachView(V view) { this.view = view; } public void detachView() { this.view = null; } } // KONKRETNE WIDOKI I PRESENTERY public interface ViewA extends View {} public interface PresenterA extends Presenter { void whatever(); } public class PresenterAImpl extends BasePresenter implements PresenterA { @Override public void whatever() { //do nothing } } // ACTIVITY BAZOWE (Z GENERYKIEM) public abstract class BaseActivity

extends Activity implements View { protected P presenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.presenter.attachView(this); // możesz wołać metody z bazowego interfejsu } @Override protected void onDestroy() { this.presenter.detachView(); super.onDestroy(); } } // Konkretne activity które rozszerza bazowe public class ActivityA extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { this.presenter = new PresenterAImpl(); // tu tworzysz konkretny presenter super.onCreate(savedInstanceState); presenter.whatever(); // możesz zawołać, bo wiesz, że `onAttach` już się wywował w base } } }