MVP GoogleSample——todo App(二)

笔记: 昨天弄清楚 项目的架构,今天来看看具体细节是怎么实现的吧。

我们以“添加一个新的任务” 这个动作,作为我们研究的主线流程。

APP 上的我们要执行的操作是:点击 floatButton添加 →  输入 task 名称  →  点击 floatbutton 完成。所以首先我们找到 floatButton 的 onClick()

floatButton 点击监听

可以看到,作为 view 的 TasksFragment 持有了一个作为 presenter 的对象,在用户进行点击操作的时候 直接调用 presenter 的方法,将用户的 UI 事件转换成了具体的逻辑任务。然后我们跟随事件,来到 presenter 中看看下面的操作。(注:这里为了解耦 presenter 具体类对象是实现了 presenter 的操作接口)

Presenter 定义

我们在 TaskActivity 中找到了 传入的 presenter 实现类 ——TasksPresenter 

两个重点

1、TasksPresenter 实现了 TasksContract.Presenter 接口 用于实现TasksPresenter 与 Fragment 的解耦。

2、通过 TaskView 接口的方法 使Fragment 持有了它本身(this)对象。

下面我们找到 addnewTask()方法

addnewtask

看到.....额.....通过 mTasksView 的接口方法又回调给了 view层 (当前的 view 层 就是 TasksFragment),好吧 我们再回去。(其实如果 app 复杂一些在这里会执行一些操作,比如获取未编辑完成的 task,或者加载一些个性化的东西 )

找到 showAddTask()方法 看到,在这里跳转到了一个新的 activity 中来执行对这个新 task 的编辑操作。好像 intent 也没有带什么数据过去。就这么直接去了...

AddEditTaskActivity

AddEditTaskActivity 与 TasksActivity 很类似。 这里出现了另一个 MVP 结构单元 

Injection.provideTasksRepository   ——   AddEditTaskFragment   —— AddEditTaskPresenter

我们执行的动作 也只有一个,就是 点击 floatbutton 来保存我们新创建的 task

还是找到 floatbutton 的 onClick 监听

执行了 presenter 的 saveTask 操作 并传入了 两个 Title 与 description 两个 String 参数。

saveTask()

saveTask 的具体操作: 首先检查是否是新建任务 

isNewTask()

咦? 这 mTaskId 是什么鬼?  哈哈,我们回去 AddEditTaskActivity 中看看 Presenter 的定义部分

记得我们前面说了 , 在执行跳转的 Intent 什么都没有传过来,所以当我们在创建一个新的 task 时 这个 taskId 一定是空的。那么接下来就会执行 creatTask()了

如果新创建的 task 是有效的 首先通过 TasksRepository 来将 task 保存到数据中,这里是 presenter 对 model 进行了调用操作 并且是由 presenter 持有 model 的对象。

saveTask()

saveTask 的操作 ,分别  task 保存到 远端  本地 以及  缓存中。保存完成后 执行了AddTaskView 接口的 showTaskList 操作 通知 UI(当前的 view 是 AddEditTaskFragment)进行先一步操作

返回上一步
将结果交给 presenter 处理
处理完成通知 view 

好,一整套添加新 task 的流程走完。我们总结一下 各部分的职责吧

架构图

首先   view 层 与 presenter 层 是相互持有,这样来达到交流的作用,view 层负责接收和展示。

然后 presenter 层与 Respository层(或者 Model)为单向持有,就是说只能是由 presenter 来控制从 model 层得到什么,或者给 model 层什么,而 model 只能服从。presenter 来负责怎么处理问题。

而 model 层就是执行者,处理有 persenter 将问题细化后的各项任务,并通过回调 来告知 presenter 执行结果。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容