美文网首页
一个自用的简单MVP封装

一个自用的简单MVP封装

作者: 留给时光吧 | 来源:发表于2018-01-19 17:16 被阅读0次

基本的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();
    }
}

相关文章

  • 一个自用的简单MVP封装

    基本的View接口:IBaseView Presenter基类:IBasePresenter Activity基类...

  • Base封装(二)-- 封装属于自己的Library(UI篇)

    绪论 之前分享了一篇 Base封装(一)--我的最简MVP架构简单的封装了自己的MVP架构,至于BaseActiv...

  • 安卓日记MVP+rxjava+retrofit封装

    MVP的简单封装 MVP框架的耦合性很低,应用于大型项目时条例清晰,方便单元测试 6666整理下自己写的一个简单...

  • 2019-03-07 Mvp 简单封装

    本篇是 Mvp + okhttp2 + retrofit2 + rxjava2 的简单封装 定义一个 BaseVi...

  • 框架小计

    1.MVP框架 https://github.com/limedroid/XDroidMvp(请求封装简单修改,F...

  • Android MVP 构架封装

    上一篇我们简单实现了一个MVP的构架,下面我们来做一个简单的封装使其使用更简单方便 源码地址RxMVP分支Tag0...

  • Android 手把手教学 MVP 模式 (二)

    昨天我们简单介绍了MVP 并封装了View 和Presenter 今天我们来看在BaseActivity 主要是抽...

  • 高级MVP架构封装演变全过程

    高级MVP架构封装演变全过程(转) 本文不会讲解什么是MVP,如果还不太了解MVP请自行查阅资料,本文重点是封装一...

  • android MVP使用与简单封装

    MVP 简单介绍 M(model)负责数据的请求,解析,过滤等数据操作 V(View)负责图示部分展示,图示事件处...

  • mvp封装

    什么是mvp,我就不多说,mvp作用就是用一个类作为桥梁,然后进行数据和view的一些交互。通过接口进行相互交流。...

网友评论

      本文标题:一个自用的简单MVP封装

      本文链接:https://www.haomeiwen.com/subject/onfaoxtx.html