一个自用的简单MVP封装

基本的View接口:IBaseView

public interface IBaseView {
}

Presenter基类:IBasePresenter

public class IBasePresenter {
    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> 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{
    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 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();
    }
}

你可能感兴趣的:(一个自用的简单MVP封装)