先创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();
}
}
}