MVVM设计模式,在此处就不介绍,网上有很多大牛都有很详细的讲解。
相信大家看了MVVM设计模式后,不太清楚到底应该怎么写。本人不才,现将个人写的一个小Demo分享给大家,请大家批评指针。
如图所示:

项目的整体结构:

运行的效果:

第一部分:写一写BaseX相关的东西
因为使用MVVM,V中负责显示,ViewModel需要持有一个View的实例(不是binding).
- IBaseView(显示的一些公共的部分)
public interface IBaseView {
// 显示错误提示
void showError(String message);
//显示成功提示
void showSuccess(String message);
//显示正在加载
void showLoading();
void complete();
}
- IBaseVM(ViewModel的Base)
因为ViewModel需要持有一个IBaseView的实例,(当从Model中获取数据后,或者显示错误/显示数据获取完成等需要使用接口的方式反馈给View)
public interface IBaseVM<V extends IBaseView> {
void attachView(V view);
void detachView();
V getIView();
}
- BaseVM (通过attachView和detachView的方式,获取BaseView的引用和解除)
public abstract class BaseVM<V extends IBaseView> implements IBaseVM{
private WeakReference<IBaseView> mVWeakReference;
@Override
public void attachView(IBaseView view) {
mVWeakReference=new WeakReference<>(view);
}
@Override
public void detachView() {
if (mVWeakReference != null) {
mVWeakReference.clear();
mVWeakReference=null;
}
}
@Override
public IBaseView getIView() {
if (mVWeakReference != null) {
return mVWeakReference.get();
}
return null;
}
}
- BaseBindingAdapter
在使用recyclerview中,难免会写适配器adapter,此处将上拉加载,下拉刷新进行封装。
public abstract class BaseBindingAdapter<T, VH extends RecyclerView.ViewHolder> extends RecyclerView.Adapter<VH> {
public List<T> mDataList;
public Context mContext;
public BaseBindingAdapter(Context context) {
mContext = context;
mDataList = new ArrayList<>();
}
@Override
public int getItemCount() {
return mDataList.size();
}
@Override
public VH onCreateViewHolder(ViewGroup parent, int viewType) {
return onCreateVH(parent, viewType);
}
@Override
public void onBindViewHolder(VH holder, int position) {
onBindVH(holder, position);
}
/**
* Author: MrGao
* CreateTime: 2018/4/6 17:12
* MethodName:
* Des:刷新数据
* Params:
* Return:
**/
public void onRefreshData(List<T> list) {
if (mDataList != null) {
mDataList.clear();
mDataList.addAll(list);
notifyDataSetChanged();
}
}
public void onLoadMoreData(List<T> list) {
if (mDataList != null && list != null) {
mDataList.addAll(list);
notifyDataSetChanged();
}
}
public abstract VH onCreateVH(ViewGroup parent, int viewType);
public abstract void onBindVH(VH holder, int position);
}
- BaseBindViewHolder
在写recyclerview的viewholder的时候,和以前不一样了,应该使用binding的方式,在adapter中通过
DataBindingUtil.inflate()的方式获取到binding对象。
public class BaseBindViewHolder extends RecyclerView.ViewHolder {
ViewDataBinding mDataBinding;
public BaseBindViewHolder(V

本文提供了一个使用MVVM设计模式的完整示例,涉及BaseX组件、ViewModel、Model数据获取(retrofit+httpclient)以及View与Model的交互。项目中,BaseVM作为ViewModel基类,实现View与Model的绑定,同时封装了RecyclerView的适配器和ViewHolder。在View部分,使用DataBindingUtil和自定义库LucklyRecyclerView展示数据。Model通过HttpUtils配置网络请求,利用RxJava2.0进行数据处理。最后,ViewModel作为桥梁,协调View和Model的数据流动。
最低0.47元/天 解锁文章
3556

被折叠的 条评论
为什么被折叠?



