创建
两个接口:MvpView、MvpPresenter
一个类:MvpActivity(MvpFragment)
1、MvpView
public interface MvpView {
}
2、MvpPresenter(泛型)
public interface MvpPresenter<V extends MvpView> {
/**
* 添加View
* @param view 一般是activity,fragment
*/
void attachView(V view);
/**
* 解除view
*/
void detachView();
}
3、MvpActivity(泛型,创建presenter,添加view,解除view)
/**
* 管理必要流程,创建具体presenter,绑定视图,解除视图
*/
public abstract class MvpActivity<V extends MvpView,P extends MvpPresenter<V>> extends Activity implements MvpView{
protected P presenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
if (presenter==null){
presenter=createPresenter();
if (presenter==null){
throw new NullPointerException(getClass().getName()+" presenter is null");
}
}
presenter.attachView((V) this);
}
/**
* 创建presenter,子类必须实现
* @return
*/
public abstract P createPresenter();
@Override
protected void onDestroy() {
super.onDestroy();
presenter.detachView();
}
public abstract class MvpActivity<V extends MvpView,P extends MvpPresenter<V>> extends Activity implements MvpView{
protected P presenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
if (presenter==null){
presenter=createPresenter();
if (presenter==null){
throw new NullPointerException(getClass().getName()+" presenter is null");
}
}
presenter.attachView((V) this);
}
/**
* 创建presenter,子类必须实现
* @return
*/
public abstract P createPresenter();
@Override
protected void onDestroy() {
super.onDestroy();
presenter.detachView();
}
}
使用
1、TestContract(V层和P层的约束类)
public interface TestContract {
interface View extends MvpView{
}
interface Presenter extends MvpPresenter<View>{
}
}
2、TestPresenter(P层实现类)
public class TestPresenter implements TestContract.Presenter {
@Override
public void detachView() {
}
@Override
public void attachView(TestContract.View view) {
}
}
3、MainActivity(V层实现类)
public class MainActivity extends MvpActivity<TestContract.View,TestContract.Presenter> implements TestContract.View{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public TestContract.Presenter createPresenter() {
return new TestPresenter();
}
}