公司近来要做一个电商类的项目,所以便开始了一个项目的框架的搭建。关于使用MVP和MVC的模式,我是推荐用MVP的,因为MVP数据和页面结构分的清晰,对于后期的迭代很有好处。
我先把这几天的干货分享给大家吧
第一、建立完项目之后我把需要常用的库(glide、okhttp、gson、rxjava、recyclerview、cardview、bottom-navigation-bar、bga-banner)导入进来、这些库基本是一个项目常用的网络请求、图片加载、banner和一些常用的view控件;
另外再添加一些常用的工具类
第二、建立基类:
1)建立P层的基类
-
/ Creates a new weak reference that refers to the given object. The new reference is not registered with any queue.
@param referent object the new weak reference will refer to
public WeakReference(T referent) {
super(referent);
}*
p.png
2)建立activity的基类
//用于创建Presenter和判断是否使用MVP模式(由子类实现)
//判断是否使用MVP模式protected abstract T createPresenter(); T mPresenter = createPresenter(); if (mPresenter != null) { mPresenter.attachView((V) this);//因为之后所有的子类都要实现对应的View接口 }
private View convertView() {
View view = null; if (offerLayout() instanceof Integer) { view = LayoutInflater.from(this).inflate((Integer) offerLayout(), null, false); } else if (offerLayout() instanceof View) { view = (View) offerLayout(); } else { throw new IllegalArgumentException("offerLayout only be View or be Resource Id"); } return view;
}
引用:View mConvertView=convertView();
if (mConvertView == null) {
// 传其他资源id 时的处理(只能传布局资源id )
throw new ClassCastException("view convert fail,check your resource id be layout resource");
} else {
setContentView(mConvertView);
}
/**
* 处理view。 用户做自己的工作
*/
public abstract void onBindView();
public abstract void destory();
public abstract void initData();
public abstract void initListener();
3.建立BaseFragment
//判断是否使用MVP模式
mPresenter = createPresenter();
if (mPresenter != null) {
mPresenter.attachView((V) this);//因为之后所有的子类都要实现对应的View接口
}
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(provideContentViewId(), container, false);
initView(rootView);
return rootView;
}
4.网络框架
网络框架我用的是使用github上的okgo已经封装好的
地址:https://github.com/jeasonlzy
网友评论