@Retention(value=RUNTIME)
@Target(value=FIELD)
public @interface Presenter
ActivityView.presenter()
,
a FragmentView.presenter()
or a CustomView.presenter()
.
It must be applied into the view implementation classes (Activity
, Fragment
or Custom View
),
otherwise it won't work.
You have access to the presenter instance after super call in Activity.onCreate(Bundle)
,
Fragment.onActivityCreated(Bundle)
and View.onAttachedToWindow()
methods.
Also during configuration changes, same instance of presenter will be injected.
Here is an example:
@FragmentView(presenter = MyPresenter.class) public class MyFragment extends Fragment{ @Presenter MyPresenter presenter; } public class MyPresenter extends AbstractPresenter<MyView>{ public MyPresenter(){ } } interface MyView{ }
By default you can't pass any objects to the constructor of presenters, but you can use Dagger to inject presenters.
Here is an example of using dagger:
@FragmentView(presenter = MyPresenter.class) public class MyFragment extends Fragment{ @Inject @Presenter MyPresenter presenter; @Override void onCreate(Bundle b){ SomeComponent.injectTo(this); } } public class MyPresenter extends AbstractPresenter<MyView>{ public MyPresenter(){ } } interface MyView{ }