3

I'm trying to set up a Base Presenter using Mosby's MvpBasePresenter in Dagger 2 I have the following base component:

public interface BaseViewComponent<V extends BaseView, P extends BasePresenter> {
    void injectView(V object);

    void injectPresenter(P object);

    P getPresenter();
}

with the following BasePresenter

public class BasePresenter <V extends BaseView> extends MvpBasePresenter {
    @Inject public BasePresenter () {

    }
}

and the following BaseActivity

public abstract class BaseActivity<P extends BasePresenter, C extends BaseViewComponent> extends MvpActivity implements BaseView<P> {

@Inject C mComponent;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (getViewContentId() != 0) {
        setContentView(getViewContentId());
        ButterKnife.bind(this);
    }

}

@Override
public P createPresenter() {
    return mComponent.getPresenter();
}
}

For some reason the create presenter is showing as returning type BasePresenter and not type P even though the component getPresenter returns P. anyone have any insight? is this even a good idea to do?

1tSurge
  • 663
  • 2
  • 7
  • 20

1 Answers1

0

My initial guess is the following, similarly to this

public interface BaseViewComponent<V extends BaseView<V, P>, P extends BasePresenter<V, P>> {
    void injectView(V object);

    void injectPresenter(P object);

    P getPresenter();
}

public class BasePresenter<V extends BaseView<V, P>, P extends BasePresenter<V, P>> extends MvpBasePresenter {
    @Inject public BasePresenter () {

    }
}

public abstract class BaseActivity<V extends BaseView<V, P>, P extends BasePresenter<V, P>, C extends BaseViewComponent<V, P>> 
    extends MvpActivity 
    implements BaseView<V, P> {

@Inject C mComponent;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (getViewContentId() != 0) {
        setContentView(getViewContentId());
        ButterKnife.bind(this);
    }

}

@Override
public P createPresenter() {
    return mComponent.getPresenter();
}
}
Community
  • 1
  • 1
EpicPandaForce
  • 79,669
  • 27
  • 256
  • 428
  • it would seem then i get something along the lines of Error:com.hannesdorfmann.mosby.mvp.MvpBasePresenter has type parameters, cannot members inject the raw type. via: injectPresenter(p object) looks like i can't do it – 1tSurge Dec 18 '15 at 00:05
  • Actually, I am pretty sure this should be possible. Although I do think you will need to use modules instead of @Inject constructor. – EpicPandaForce Dec 18 '15 at 10:05
  • Care to elaborate? I'm not sure i follow – 1tSurge Dec 18 '15 at 16:21