基本的View接口:IBaseView
public interface IBaseView {
}
Presenter基类:IBasePresenter
public class IBasePresenter<T extends IBaseView> {
private T baseView;
public void attachView(T baseView) { //绑定view
this.baseView = baseView;
}
public T getView() { //获取view
return baseView;
}
public boolean isViewAttached() { //判断是否绑定
return baseView != null;
}
public void detachView() { //解绑view
baseView = null;
}
public void onSaveInstanceState(Bundle savedState) {} //状态保存时调用
public void onRestoreInstanceState(Bundle savedInstanceState){} //状态回复时调用
public void onDestroyPresenter() {} //presenter销毁时调用
}
Activity基类:IBaseActivity
public abstract class IBaseActivity<V extends IBaseView,T extends IBasePresenter<V>> extends AppCompatActivity implements IBaseView{
private T mPresenter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (mPresenter == null) {
mPresenter = createPresenter();
}
if (mPresenter == null) { //为空时抛出异常
throw new NullPointerException("presenter is null !");
}
mPresenter.attachView((V) this);
}
@Override
protected void onDestroy() {
super.onDestroy();
mPresenter.detachView();
mPresenter.onDestroyPresenter();
mPresenter = null;
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mPresenter.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
mPresenter.onRestoreInstanceState(savedInstanceState);
}
public abstract T createPresenter();
public T getPresenter() {
return mPresenter;
}
}
使用示例:
public interface RequestView extends IBaseView{
void loading();
void getResult(String result);
}
public class RequestPresenter extends IBasePresenter<RequestView>{
private RequestModel requestModel;
public RequestPresenter(){
requestModel = new RequestModel();
}
public void doRequest(){
getView().loading();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
getView().getResult(requestModel.request());
}
},2000);
}
}
public class RequestModel {
public String request(){
return SystemClock.currentThreadTimeMillis() % 2 == 0 ? "Success" : "Error";
}
}
public class MainActivity extends IBaseActivity<RequestView,RequestPresenter> implements RequestView{
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = findViewById(R.id.tv);
}
@Override
public RequestPresenter createPresenter() {
return new RequestPresenter();
}
@Override
public void loading() {
tv.setClickable(false);
tv.setText("loading");
}
@Override
public void getResult(String result) {
tv.setClickable(true);
tv.setText(result);
}
public void click(View view) {
getPresenter().doRequest();
}
}