最近很火的MVP+Retrofit2+rxjava+Dagger2框架 -- MVP
来源:互联网 发布:博罗县网络问政平台 编辑:程序博客网 时间:2024/05/28 11:48
本人从事Android开发已经有一定的时间,已经很熟悉了MVC的开发模式。
然而突然发现,MVP+Retrofit2+rxjava+Dagger2最近很火,很多人都推荐使用这种模式进行开发。
所以目前来学习下,以下内容只是个人见解。
1.什么是MVP?
M:Model ---数据管理层
V:View ---控件显示与用户交互层
P:Presenter ---协调Model与View之间的操作,逻辑层
在看完以上的解释后,我相信大家大概明白了为什么要使用MVP。
因为MVC模式中,Controller既需要负责逻辑的处理,又要负责控件显示。
而MVP,相当于把MVC中的Controller拆分为了V + P。
我对MVP模式的理解是:
一切的逻辑操作全部放在Presenter中,在Presenter中通过对Model、View对象的操作达到业务逻辑的实现。
而Model层只做与数据相关的操作。
View层只做控件的显示操作。
那么具体的还是来看代码吧:
如图:
MainAct是一个Activity,实现了MainActView接口。
MainActPresenter是逻辑层。
MVP中的V,指的便是MainAct。
MainAct作为MainActView的实现类,实现了你如何去做控件相关的操作。
MainActView:
public interface MainActView extends BaseActView { //获取Fragments List<Fragment> getFragments(); //显示特定Fragment void showFragment(int position);}MainAct:public static final String EXT_FRAGMENT = "fragment_name";private MainActPresenter presenter;private List<Fragment> frgs;private FragmentManager ftManager;private FragmentTransaction transaction;//日程private ScheduleFrg scheduleFrg;//消息private MessageFrg messageFrg;//联系人private ContactFrg contactFrg;//我private UserFrg userFrgFrg;//底部导航栏private RadioGroup rgMain;//记录选中Fragment的idprivate int id = 0;@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); id = 0; if(savedInstanceState!=null){ //取出下标状态 id = savedInstanceState.getInt("id"); } presenter.onCreate(id);}/** * 防止Activity保存Fragment状态 * @param outState */@Overridepublic void onSaveInstanceState(Bundle outState) { //保存下标状态 outState.putInt("id",id);}@Overridepublic void showLoading() {}@Overridepublic void hideLoading() {}@Overridepublic MainActPresenter initPresenter() { presenter = new MainActPresenter(this); return presenter;}@Overridepublic int initRootView() { return R.layout.act_main;}@Overridepublic void initView() { rgMain = (RadioGroup) findViewById(R.id.rg_main); scheduleFrg = new ScheduleFrg(); messageFrg = new MessageFrg(); contactFrg = new ContactFrg(); userFrgFrg = new UserFrg();}@Overridepublic void bindingEvent() { rgMain.setOnCheckedChangeListener(this);}@Overridepublic List<Fragment> getFragments() { if (frgs == null) { frgs = new ArrayList<>(); frgs.add(scheduleFrg); frgs.add(messageFrg); frgs.add(contactFrg); frgs.add(userFrgFrg); ftManager = getSupportFragmentManager(); transaction = ftManager.beginTransaction(); transaction.add(R.id.frg_layout, scheduleFrg); transaction.add(R.id.frg_layout, messageFrg); transaction.add(R.id.frg_layout, contactFrg); transaction.add(R.id.frg_layout, userFrgFrg); transaction.commit(); } return frgs;}@Overridepublic void showFragment(int position) { id = position; ftManager = getSupportFragmentManager(); transaction = ftManager.beginTransaction(); Observable.from(frgs) .subscribe(new Action1<Fragment>() { @Override public void call(Fragment fragment) { transaction.hide(fragment); } }); //根据选择,切换当前Fragment transaction.show(frgs.get(position)); transaction.commit();}@Overridepublic void onCheckedChanged(RadioGroup group, int checkedId) { presenter.onRadioGroupClick(group.indexOfChild(group.findViewById(checkedId)));}
仔细一看,你会发现,MainAct中好像全部是重写的方法,并没有逻辑。
没错,一切的逻辑全部放在Presenter中,MainAct只是单纯的去显示控件。
下面再来看一下MainActPresenter:private MainActView mainActView;public MainActPresenter(MainActView mainActView) { this.mainActView = mainActView;}public void onCreate(int position) { mainActView.getFragments(); mainActView.showFragment(position);}public void onRadioGroupClick(int position) { mainActView.showFragment(position);}
你可以看到,在Presenter里有一个MainActView的实现类对象。
那么整体逻辑便是:在Presenter里操作MainActView,控制它什么时候去做相关的控件操作,而具体的控件操作,由Activity完成。
那么看到这里,有的人会问了,Model呢?
不要急。当整体框架结束后,Dagger2实现的DataManager可以充当Model。
0 0
- 最近很火的MVP+Retrofit2+rxjava+Dagger2框架 -- MVP
- MVP+RxJava+Retrofit2+Dagger2
- MVP+Dagger2+Retrofit2.0+Rxjava
- mvp+dagger2+retrofit2+rxjava 项目框架 最佳实践
- mvp+dagger2+retrofit2+rxjava 项目框架 最佳实践
- owspace 是基于 MVP+Dagger2+Retrofit2.0+Rxjava 的 APP
- android之dagger2+rxjava+retrofit2+mvp架构的结合
- Dagger2+Retrofit2+RxJava练习、Mvp简介
- Retrofit2-RxJava-Dagger2-MVP完美封装
- RxJava2 + Retrofit2 + Mvp + Dagger2框架搭建
- MVP模式+Dagger2+Rxjava+retrofit2+lambda表达式 … retrofit2带进度的上传下载
- RXjava+Retrofit+dagger2打造自己的MVP框架
- mvp+retrofit2+rxjava+dagger框架的简单搭建
- Rxjava + retrofit + dagger2 + mvp搭建Android框架
- Android最流行框架MVP,Dagger2,RxJava
- Android MVP 实现。基于Dagger2 + RxJava + Retrofit2 + Realm + ButterKnife + EventBus
- Android Mvp快速搭建框架MVP+Dagger2+Retrofit+Rxjava
- MVP+Dagger2+Retrofit2+Rxjava搭建的一个电影相关的Demo
- C++输入
- gtd好文两篇收藏
- Qt之QLocalSocket
- 重写equals
- JAVA基础(001_Collection与Collections的区别)
- 最近很火的MVP+Retrofit2+rxjava+Dagger2框架 -- MVP
- 静态/动态注册广播的区别
- php-设计模式--适配器模式
- [数据结构与算法] 2,算法
- android ContentResolver详解
- Spark 1.6.0 单机安装配置
- Redhat通过NFS挂载FreeBSD 目录
- opencv2.4.11百度云下载地址
- Google使用人工智能压缩图片,效果优于JPEG