传统MVP的简单搭建

先创mvp包 里四个包contract,modle,view,persenter
在contract里创建契约类IContract

//契约类
public interface IContract {

//前期搭建mvp框架的时候 先不用往modle和view层写东西  后期需要用到的时候在来定义方法
//定义接口modle 装联网请求和获取数据
interface Modle{

}

//在定义接口view 装吐司方法类似的
interface View{

}

//在定义persenter接口  泛型里分别继承m和v m继承本契约类里的modle v继承view
interface Persenter<M extends IContract.Modle,V extends View>{
    //分别定义表两个注册modle和view 的没有方法体的方法传各自的类型和modle  view
    void registerModle(M modle);

    void registerView(V view);

    //定义获取view视图 没有方法体的方法 返回类型是v getView()
    V getView();

    //销毁没有方法体的方法
    void destory();

}
}

在去persenter包里创建BasePersenter类

//父类的persenter 泛型里分别继承m 和 v都是契约类的modle和view 在实现契约类的persenter泛型在传m ,v 在实现方法
public abstract class BasePersenter<M extends IContract.Modle,V extends IContract.View> implements IContract.Persenter<M,V> {

//最好把modle改成受保护的 方便后期调用
protected M modle;
private WeakReference<V> wrf;

@Override
public void registerModle(M modle) {
    //重写注册modle的方法 this.modle=modle 提上去
    this.modle=modle;
}

@Override
public void registerView(V view) {
    //软引用 这个方法不用的时候 会自动回收
    //new weakreference 泛型空括号里传小写view返回值 提上去
     wrf = new WeakReference<>(view);
}

@Override
public V getView() {
    //重写获取view视图的方法
    //返回wrf==null?null:wrf.get()
    return wrf==null?null:wrf.get();
}

@Override
public void destory() {
    //重写销毁的方法
    //先判断wrf非空
    if(wrf!=null){
        //要是非空就清空在=null
        wrf.clear();
        wrf=null;
    }
    //生成一个视图销毁的方法
    onViewDestory();
}

//改成受保护抽象的 删掉方法体 记得上面也改成抽象的
protected abstract void onViewDestory();
}

在去mvp包里创建BaseMvp类

//basemvp的接口  泛型 分别继承m v  p  m 和v是继承契约类的 p继承persenter的父类
public interface BaseMvp<M extends IContract.Modle,V extends IContract.View,P extends BasePersenter>{

//分别定义三个初始化m v p的三个没有方法体的 方法 返回各自的类型
M createModle();

V createView();

P createPersenter();
}

再去mvp包完创建base包创建BaseActivity和BaseFragment类

BaseActivity类

//base activity的父类 泛型分别继承m v p跟前面一样 在继承AppCompatActivity   在实现basemvp接口 泛型传m v p 前面加个抽象
public abstract class BaseActivity<M extends IContract.Modle,V extends IContract.View,P extends BasePersenter> extends AppCompatActivity implements BaseMvp<M,V,P>{

private P persenter;

//重写Activity 中的oncreate方法
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //先直接调用初始化persenter的方法返回值 提上去
     persenter = createPersenter();
     //在判断persenter非空
    if(persenter!=null){
        //分别用persenter调用注册modle和view  在分贝我那个括号里传初始化对应的modle和view
        persenter.registerModle(createModle());
        persenter.registerView(createView());
    }
}

//重写ondestory方法
@Override
protected void onDestroy() {
    super.onDestroy();
    //先判断persenter非空
    if(persenter!=null){
        //要是非空就用persenter调用销毁方法
        persenter.destory();
    }
}
}

BaseFragment类

//base fragment的父类 泛型分别继承m v p跟前面一样 在继承AppCompatActivity   在实现basemvp接口 泛型传m v p 前面加个抽象
public abstract class BaseFragment<M extends IContract.Modle,V extends IContract.View,P extends BasePersenter> extends Fragment implements BaseMvp<M,V,P>{

private P persenter;

//把baseactivity复制过来之后该三个地方
//先继承frgament 在改成onAttach方法 在把销毁的方法改成公共的
@Override
public void onAttach(Context context) {
    super.onAttach(context);
    //先直接调用初始化persenter的方法返回值 提上去
    persenter = createPersenter();
    //在判断persenter非空
    if(persenter!=null){
        //分别用persenter调用注册modle和view  在分贝我那个括号里传初始化对应的modle和view
        persenter.registerModle(createModle());
        persenter.registerView(createView());
    }
}

//重写ondestory方法
@Override
public void onDestroy() {
    super.onDestroy();
    //先判断persenter非空
    if(persenter!=null){
        //要是非空就用persenter调用销毁方法
        persenter.destory();
    }
}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值