Android MVP 模式介绍与示例
2016-11-25 本文已影响73人
五谷观精分道长
MVP模式是什么?
MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。
MVP与MVC区别
一张图即可看懂
图片来自互联网
一个简单的示例NewsMvp
整体类结构
QQ截图20161125085423.pngMVP模式结构
- Model: 业务逻辑和实体模型。
- View:用户交互和视图显示,在android中对应activity。
- Presenter: 负责完成View于Model间的逻辑和交互。
<接口是为了提高代码的可用性,可以不使用>
核心代码
Model层获取网络数据:
public class NewsModel implements InNewsModel {
News news;
@Override
public News getNews() {
new Thread(new Runnable() {
@Override
public void run() {
Gson gson = new Gson();
news=gson.fromJson(HttpGet.request(""),News.class);
// Log.d("xx", news.getNewslist().get(0).getTitle());
}
}).start();
//主线程等待一秒
sleep(1000);
// Log.d("", news.getNewslist().get(0).getTitle());
return news;
}
}
View层把view传到Presenter层,并且加载从Presenter层获取的数据
mNewsPresenter = new NewsPresenter(this);
mNewsPresenter.loadNews();
@Override
public void addNews(News news) {
lv = (ListView) findViewById(R.id.listview);
// Log.d("xx",news.getNewslist().get(0).getTitle());
SimpleAdapter adapter = new SimpleAdapter(this, getData(news),
R.layout.listview_item, new String[]{"img", "title", "info"},
new int[]{R.id.img, R.id.title, R.id.info});
lv.setAdapter(adapter);
}
private List<Map<String, Object>> getData(News news) {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Map<String, Object> map = new HashMap<String, Object>();
for (News.NewslistBean newslistBean : news.getNewslist()) {
map = new HashMap<String, Object>();
map.put("img", R.drawable.ic_menu_camera);
map.put("title", newslistBean.getTitle());
map.put("info", newslistBean.getDescription());
list.add(map);
}
return list;
}
Presenter层通过NewsModel获取数据传给View层
@Override
public void loadNews() {
//通过调用IInfoView的方法来更新显示,设计模式运用
//类似回调监听处理
mInNewsView.addNews(mNewsModel.getNews());
}
2016-11-24-9423b24e9f46bbbc53741289a5134728.png