google 官方 mvp架构解读,与简单实现
来源:互联网 发布:ssm框架打印sql语句 编辑:程序博客网 时间:2024/04/28 00:51
android 开发架构,mvp算是比较流行的,最近我也拜读谷歌官方写的代码,先简单的理解他们其中的设计,再去重新实现。
首先谷歌的项目有如下分包特点:
依照模块进行分包。
我个人喜欢按照种类进行分包:
如下是我的分包
其实哪种分包都无所谓,喜欢就行。方便开发是最好的。
于是:先解读google的基础类,BaseView 和 BasePresenter
BaseView谷歌是这么写的(其实就是view的接口,展示view)
public interface BaseView<T> { void setPresenter(T presenter);}
将presenter 传值在里面,传值的作用,为了能让开发者使用presenter去操作view。presenter是主要作用于与网络数据沟通,获取model,处理数据一类的。
public interface BasePresenter { void start();}
start主要执行一些初始化一类的东西
之后为view和presenter建立契约类
构建出如下契约类
public interface TaskDetailContract { interface View extends BaseView<Presenter> { void showTitle(String title); } interface Presenter extends BasePresenter { void editTask(); }}
为了方便解读,我进行了精简
于是官方将一个fragment作为view,
于是让fragment去实现TaskDetailContract.View接口
public class TaskDetailFragment extends Fragment implements TaskDetailContract.View { @Override public void setPresenter(@NonNull TaskDetailContract.Presenter presenter) { mPresenter = presenter; } @Override public void showTitle(String title) { mDetailTitle.setVisibility(View.VISIBLE); mDetailTitle.setText(title); }}
我也对官方的demo进行精简,为了方便解读与理解。
当然还有一个最重要的类Presenter,继承了presenter之后,在里面就可以写很多东西了,如网络请求,如处理数据,这样就把android层次分的很清楚了。维护起来也是相当轻松的~
public class TaskDetailPresenter implements TaskDetailContract.Presenter { @Override public void start() { openTask(); } @Override public void editTask() { if (null == mTaskId || mTaskId.isEmpty()) { mTaskDetailView.showMissingTask(); return; } mTaskDetailView.showEditTask(mTaskId); }}
在看到这一步的时候 ,有个疑问?官方把fragment作为view的话,activity去干嘛了?
于是查看activity的代码:解读如下
public class TaskDetailActivity extends AppCompatActivity { public static final String EXTRA_TASK_ID = "TASK_ID"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.taskdetail_act); // Set up the toolbar. Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); ActionBar ab = getSupportActionBar(); ab.setDisplayHomeAsUpEnabled(true); ab.setDisplayShowHomeEnabled(true); // Get the requested task id String taskId = getIntent().getStringExtra(EXTRA_TASK_ID); TaskDetailFragment taskDetailFragment = (TaskDetailFragment) getSupportFragmentManager() .findFragmentById(R.id.contentFrame); if (taskDetailFragment == null) { taskDetailFragment = TaskDetailFragment.newInstance(taskId); ActivityUtils.addFragmentToActivity(getSupportFragmentManager(), taskDetailFragment, R.id.contentFrame); } // Create the presenter new TaskDetailPresenter( taskId, Injection.provideTasksRepository(getApplicationContext()), taskDetailFragment); }}
activity是将view(实际上是fragment)和Presenter创建出来。
activity里并没有多少代码。
如上就是解读,其实简单实现,都在每一步都解释的很清楚了,谢谢观看,如有疑问下面提问~
- google 官方 mvp架构解读,与简单实现
- Google官方架构MVP解析与实战
- Android官方MVP架构--解读
- Android官方MVP架构解读
- Android官方MVP架构解读
- Android官方MVP架构解读
- Android官方MVP架构解读
- Android官方MVP架构解读
- Android官方MVP架构解读
- Android官方MVP架构解读
- 认识GOOGLE官方架构MVP
- Google官方MVP Sample代码解读
- Android官方MVP架构示例项目解读
- Google 官方Android MVP架构实践
- google官方mvp+dagger2架构详解
- Google官方MVP+Dagger2架构详解
- Google官方MVP+Dagger2架构详解
- Google官方MVP+Dagger2架构 dagger2详解
- 九度OJ 1080 (大整数的任意进制的转换)
- 培训感言
- HTML5新标签学习总结(网页结构)上
- 【团队-java-maven】在java项目中部署maven(1)论我为什么花了好几天,把我的普通web工程转成maven...
- POJ1287Networking(最小生成树,裸题)
- google 官方 mvp架构解读,与简单实现
- Wide character in print at hcp.pl line 21.
- Qt---QNetworkAccessManager
- Android圆形头像图Circle ImageView
- ios 常用的30个动画效果
- 【读书笔记】成员变量和局部变量(2)
- 【ZZULI】-1896-985的买饮料难题(思维)
- PAT-B 1055. 集体照
- Android关于RAM、ROM、SD卡以及各种内存的区别