Android仿微信发现功能,Android高仿微信之mvp实现(一)

前言

为了巩固一下自己对mvp架构的理解,于是突生一个想法,用mvp架构来实现一点类似于微信的功能。所以就有了现在的标题高仿微信之mvp实现。希望自己在实现的过程中能熟练掌握mvp架构的精髓,同时我也在这写下自己在这过程中的成长与所思。该片文章为第一系列,以后会根据自己的进度来写下剩余的系列。还没接触的也可以一起来学习下,当然如有不对的欢迎来指教。

MVP

首先我来简单的解释下何为mvp

M就是Model ,这里主要负责的就是业务处理,数据的获取,例如数据库的读写,http的网络数据的处理。

V就是View ,顾名思义视图的意思,这里主要的任务就是处理各个界面ui控件的处理。

P就是Presenter ,控制器,这里负责的是Model与View之间的联系操作。

那么他们之间到底是如何联系在一起工作的呢?当一个界面被创建时首先调用View,View调用Presenter中的相应操作,在Presenter中则调用了Model的数据操作方法,Presenter中获得数据时,则反过来调用View中接口传回给View层。这样就简单的实现了MVP中的合作流程。这样做的一个明显的好处就是把数据操作与主界面分离,完全隔离数据操作,使得各个功能实现模块化,降低他们之间的耦合性,只要命名合理就能迅速明白该方法的作用。下面以该项目为例。

本来想以主框架为例的,但主框架目前没有Model层,所以下面以微信中的第一个聊天微信窗口为例,用MVP来实现

View层

当我们打开微信聊天界面时,要先调用设置数据的方法所以我们可以定义一个接口,其中实现设置数据的方法:

public interface WXView {

void setData(List list);

}

相信大家一看方法名就能很好理解该方法要做的操作了

Model层

既然该层是实现对数据的操作,自然我们也可以定义一个接口,实现加载数据的方法:

public interface WXModel {

List initData();

}

定义完之后我们再定义一个类实现该接口,进行数据的加载;

public class WXModleImp implements WXModel{

private List mList;

private WXItemInfo wxItemInfo;

@Override

public List initData() {

mList = new ArrayList<>();

for (int i = 0; i < 10; i++) {

wxItemInfo = new WXItemInfo();

wxItemInfo.setTitle("测试标题" + i);

wxItemInfo.setContent("测试内容" + i);

wxItemInfo.setTime(i + ":11");

mList.add(wxItemInfo);

}

return mList;

}

}

这里现在为了测试,所以做了假数据。现在是不是明白了一点呢?只要我们还有其他相关操作,就可以在接口中在定义一个该操作的方法,在WXModelImp中实现就可以了。

Presenter层

到这里是不是想到也要定义一个相关接口,以便实现相关方法,没错就是这样,实现的方法就是把View与Model连接起来:

public interface WXPresent {

void loadData();

}

定义一个类实现该接口,在其中引用View与Model:

public class WXPresentImp implements WXPresent{

private WXModel mWXModle;

private WXView mWXView;

private List mList;

public WXPresentImp(WXView wxView) {

mWXView = wxView;

mWXModle = new WXModleImp();

}

@Override

public void loadData() {

mList = mWXModle.initData();

mWXView.setData(mList);

}

}

到这里基本的MVP就要结束了,最后只要在微信聊天界面实现View层的WXView接口在其中填充数据,实例化Presenter层的WXPresentImp类,调用其方法loadData();

public class WXFragment extends Fragment implements WXView{

@InjectView(R.id.wx_recyclerView)

RecyclerView wxRecyclerView;

private WXAdapter wxAdapter;

private WXPresentImp mWXPresentImp;

@Nullable

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

View view = LayoutInflater.from(getContext()).inflate(R.layout.wx_layout, null);

ButterKnife.inject(this, view);

wxAdapter = new WXAdapter(getContext());

mWXPresentImp = new WXPresentImp(this);

mWXPresentImp.loadData();

wxRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));

wxRecyclerView.addItemDecoration(new WXItemDecoration(getContext()));

wxRecyclerView.setAdapter(wxAdapter);

return view;

}

@Override

public void onDestroyView() {

super.onDestroyView();

ButterKnife.reset(this);

}

@Override

public void setData(List list) {

wxAdapter.addData(list);

}

}

到这里整个的微信聊天的MVP就完成了,回过去再整理下思路发现是不是清楚了很多。一旦你实现了MVP就是这么简单明了,思路清晰。后面项目的工程量大了,更加需要一个很好的模式了管理项目。所以还是值得推荐的。

效果图

bVu8jF?w=551&h=810

关注

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值