最近在研究MVP和MVVM架构模式,看了看觉得还是MVP好做点,特意查查资料,做了下简单的封装。先看一下自己封装项目的基本库结构。
来看看源码吧
BasePresenter.java
public abstract class BasePresenter<T> {
protected Reference<T> mViewRef;//View接口类型的弱引用
public void attachView(T view){
mViewRef=new WeakReference<T>(view);//建立关系
}
protected T getView(){
return mViewRef.get();
}
public boolean isViewAttached(){
return mViewRef!=null&&mViewRef.get()!=null;
}
public void detachView(){
if (mViewRef!=null){
mViewRef.clear();
mViewRef=null;
}
}
}
BaseActivity.java
public abstract class BaseActivity<V,T extends BasePresenter<V>> extends AppCompatActivity {
protected T mPresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mPresenter=createPresenter();//创建presenter
mPresenter.attachView((V)this);
initVariables();
initViews(savedInstanceState);
loadData();
}
@Override
protected void onDestroy() {
super.onDestroy();
mPresenter.detachView();
}
//初始化变量,接受其他页面传递的参数
protected abstract void initVariables();
//初始化布局文件、控件
protected abstract void initViews(Bundle savedInstanceState);
//加载数据
protected abstract void loadData();
protected abstract T createPresenter();
}
BaseFragment.java
public abstract class BaseFragment<V,T extends BasePresenter<V>> extends Fragment {
protected T mPresenter;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mPresenter=createPresenter();//创建presenter
mPresenter.attachView((V) this);
initVariables();
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(getContentId(),container,false);
}
@Override
public void onResume() {
super.onResume();
loadData();
}
@Override
public void onDestroy() {
super.onDestroy();
mPresenter.detachView();
}
protected abstract void initVariables();
protected abstract int getContentId();
protected abstract void loadData();
protected abstract T createPresenter();
}
数据监听接口
DataRequestListener.java
public interface DataRequestListener<T> {
void success(T data);
void fail();
}
特此记录特供大家参考,仅仅是简单的封装,可以根据自己的项目自己再次封装重构,自己也算做个笔记!~
程序员内功修炼手册 不定期分享程序员基础知识,大前端知识!想跟博主一块成长的快快关注吧!