通过之前发表的一篇 你拥有它,让你Android开发更简单只是简单介绍了一下Basic框架支持的功能,没有具体介绍使用方法和具体实现,有的人问我中实现思想,有的人问我他们项目重构这个框架适不适合?也有的人问我支持的功能太多了如果分开的话会好一点吧?
其实我最开始初衷是开发一套适合自己的 Android 框架,因为只要每一个新项目立项,就要搭建一套基础框架,可能是你之前代码的搬运,可能是重新设计。 开始没有想到开源,也没有想到会有这多人关注,后来想可以通过我个人的理解去帮助更多人,也是一件兴奋的事! 功能多是因为我想开发一套基础模板,所以他功能多,所以也不适合代码重构使用,适合新项目并且mvp模式项目使用。
- Mvp模式
- 网络请求的封装
- 强大的漂亮日志
- 列表数据的统一业务处理
- 多种样式上拉加载、下拉刷新
- App crash 异常的处理
- Loading页面的统一处理
- 快速实现广告轮播图、引导页功能
- 快速实现底部导航功能
- 右滑页面关闭当前Activity
其中Mvp的好处,为什么要用mvp,mvp简单的例子是什么样的?这些网上有好多例子,我就不瞎bb了.
LoginPresenter mPresenter = new LoginPresenterImpl(this);
mPresenter.onLogin(username, password);
每次用到Presenter的时候每次都要重新New PresenterImpl.那可以把这些类放在一个大池子里面,类似于线程池一样,我用到的时候就把他取出来.
LogicProxy详解:
将所有的实现类放入到HashMap中保存,key是接口,value是实现类
public void init(Class... clss) {
List<Class> list = new LinkedList<Class>();
for (Class cls : clss) {
if (cls.isAnnotationPresent(Implement.class)) {
//把Presenter接口放在LinkedList中维护
list.add(cls);
for (Annotation ann : cls.getDeclaredAnnotations()) {
if (ann instanceof Implement) {
try {
//把Presenter实现类放在HashMap中维护
m_objects.put(cls, ((Implement) ann).value().newInstance());
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
}
}
}
//提供一个方法获取Presenter实例并绑定View方法
public <T> T bind(Class cls, BaseView o) {
Object ret = m_objects.get(cls);
((BasePresenter) ret).attachView(o);
return (T) ret;
}
在BaseActivity中提供一个公共方法,子Activity中可直接调用
//获得该页面的实例<BaseActivity>
public <T> T getLogicImpl(Class cls, BaseView o) {
return LogicProxy.getInstance().bind(cls, o);
}
//BaseActivity 中的onDestroy方法会判断mPresenter不为空的情况下 销毁presenter绑定的view
@Override
protected void onDestroy() {
super.onDestroy();
if (mPresenter != null)
mPresenter.detachView();
}
//获取当前页面的实例<子LoginActivity> 这样是不是代码就简洁了好多
ILoginImpl mPresenter = getLogicImpl(ILogin.class, this);
mPresenter.onLogin(username,password);
所有Presenter中肯定是有公共的部分,比如说绑定view,销毁view,获得view 的实例,那BasePresenter就是这些方法的实现?
public class BasePresenter<T extends BaseView> implements Presenter<T> {
private T mView;
@Override
public void attachView(T mvpView) {
this.mView = mvpView;
}
@Override
public void detachView() {
this.mView = null;
}
public boolean isViewBind() {
return mView != null;
}
public T getView() {
return mView;
}
LogicProxy.getInstance().init(ILogin.class, IMain.class);
@Implement(LoginLogic.class)
public interface ILogin {
void login(String name, String passwrod);
}
public class LoginLogic extends BasePresenter implements ILogin {
@Override
public void login(String name, String passwrod) {
}
}
mPresenter = getLogicImpl(ILogin.class, this);
((LoginLogic) mPresenter).login(username, password);
这样有没有让你的mvp代码简单易懂呢?代码也非常简洁,so easy 实现mvp. 更多详情请查看项目:https://github.com/meikoz/Basic 如果感觉对你有帮助请start 给予支持!