Android有关于MVP的封装
有关于mvp还不懂的朋友可以看看我之前写的文章。
接着上一篇文章来继续撸。
一般来说,MVP的V层是和BaseActivity放到一起的,这里只说BaseActivity。于是就创建了几个类。
先看IBase
public interface IBasePresenter<V extends IBaseView>{
void create(V v);
void start();
void resume();
void pause();
void stop();
void destroy();
}
public interface IBaseView {
void showSuccessToast(String text);
}
需要注意的是IBasePresenter里面有一个泛型,这个泛型就是IBaseView的子类
然后就是BasePresenter这个类了。
public class BasePresenter<V extends IBaseView> implements IBasePresenter<V> {
private V mView;
@Override
public void create(V v) {
mView = v;
}
@Override
public void start() {
}
@Override
public void resume() {
}
@Override
public void pause() {
}
@Override
public void stop() {
}
@Override
public void destroy() {
mView = null;
}
public V getV() {
return mView;
}
}
同样会在初始化的时候传递IBaseView的子类过来,create就是为mView赋值的。
最后我们就要开始构造BaseActivity这个类了。
public abstract class BaseActivity<P extends IBasePresenter> extends AppCompatActivity implements IBaseView {
private P presenter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//初始化Presenter
presenter = newInstance();
//为Presenter赋值IBaseView
getPresenter().create(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
//在结束的时候执行Presenter结束的方法
presenter.destroy();
presenter = null;
}
@Override
public void showSuccessToast(String text) {
Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
}
protected abstract P newInstance();
public P getPresenter() {
return presenter;
}
}
这个类为抽象类,使用时需要注意的就是newInstance和getPresenter方法。
现在便需要对TestActivity进行改造了,先建立TestPresenter类
public class TestPresenter extends BasePresenter<TestActivity> {
private Model mModel = null;
public TestPresenter() {
mModel = new Model();
}
public void log() {
//先log在返回log的值
String logString = mModel.log();
getV().showSuccessToast(logString);
}
}
然后就是TestActivity
public class TestActivity extends BaseActivity<TestPresenter> {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
findViewById(R.id.btnClickToLog).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
log();
}
});
}
@Override
protected TestPresenter newInstance() {
return new TestPresenter();
}
public void log() {
getPresenter().log();
}
public void toastString(String text) {
Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
}
}