原文:REACTIVE APPS WITH MODEL-VIEW-INTENT - PART 8 - NAVIGATION
作者:Hannes Dorfmann
译者:却把清梅嗅

在上一篇博客中,我们探讨了协调模式是如何在Android中应用的。这次我想展示如何在Model-View-Intent中使用它。

如果您还不知道协调器模式是什么,我强烈建议您回过头来阅读上文内容。

MVI中应用此模式与MVVMMVP没有太大区别:我们将lambda作为导航的回调传递给我们的MviBasePresenter。有趣的是我们如何在状态驱动的架构中触发这些回调?我们来看一个具体的例子:

class FooPresenter(private var navigationCallback: ( () -> Unit )?
) : MviBasePresenter<FooView> {  lateinit var disposable : Disposableoverride fun bindIntents(){val intent1 = ...val intent2 = ...val intents = Observable.merge(intent1, intent2)val state = intents.switchMap { ... }// 这里就是有趣的部分val sharedState = state.share()disposable = sharedState.filter{ state ->state is State.Foo}.subscribe { navigationCallback!!() }subscribeViewState(sharedState, FooView::render)}override fun unbindIntents(){disposable.dispose() // disposable 导航navigationCallback = null // 避免内存泄漏}
}

其思想是:通过RxJavashare() 操作符,我们对通常用来对View层渲染状态的Observable进行复用,再加上通过与 .filter() 操作符的组合使用,达到能够监听到确定的状态,这之后,当我们观察到该状态时,触发对应的导航操作,然后协调器模式就像我之前的博客文章中描述的那样进行工作。


系列目录

《使用MVI打造响应式APP》原文

  • Part 1: Model
  • Part 2: View and Intent
  • Part 3: State Reducer
  • Part 4: Independent UI Components
  • Part 5: Debugging with ease
  • Part 6: Restoring State
  • Part 7: Timing (SingleLiveEvent problem)
  • Part 8: In-App Navigation

《使用MVI打造响应式APP》译文

  • [译]使用MVI打造响应式APP(一):Model到底是什么
  • [译]使用MVI打造响应式APP[二]:View层和Intent层
  • [译]使用MVI打造响应式APP[三]:状态折叠器
  • [译]使用MVI打造响应式APP[四]:独立性UI组件
  • [译]使用MVI打造响应式APP[五]:轻而易举地Debug
  • [译]使用MVI打造响应式APP[六]:恢复状态
  • [译]使用MVI打造响应式APP[七]:掌握时机(SingleLiveEvent问题)
  • [译]使用MVI打造响应式APP[八]:导航

《使用MVI打造响应式APP》实战

  • 实战:使用MVI打造响应式&函数式的Github客户端

关于我

Hello,我是却把清梅嗅,如果您觉得文章对您有价值,欢迎 ❤️,也欢迎关注我的博客或者Github。

如果您觉得文章还差了那么点东西,也请通过关注督促我写出更好的文章——万一哪天我进步了呢?

  • 我的Android学习体系
  • 关于文章纠错
  • 关于知识付费

[译]使用MVI打造响应式APP(八):导航相关推荐

  1. [译]使用MVI打造响应式APP(三):状态折叠器

    原文:REACTIVE APPS WITH MODEL-VIEW-INTENT - PART3 - STATE REDUCER 作者:Hannes Dorfmann 译者:却把清梅嗅 在上一章节中,我 ...

  2. [译]使用MVI打造响应式APP[七]:掌握时机(SingleLiveEvent问题)

    原文:REACTIVE APPS WITH MODEL-VIEW-INTENT - PART7 - TIMING (SINGLELIVEEVENT PROBLEM) 作者:Hannes Dorfman ...

  3. Bootstrap实现的响应式APP下载页面代码

    这次分享的是,一个设计优雅的APP下载页面主题,这套HTML是用当下最流行的Bootstrap框架实现的版本是v3.3.3,这套代码非常适合再次开发,代码简介没有多余的部分,结构组织清晰,代码注释完整 ...

  4. Bootstrap页面布局16 - BS导航菜单和其响应式布局以及导航中的下拉菜单

    代码: <div class='container-fluid'><h2 class='page-header'>导航</h2><!-- .navrbar n ...

  5. html纵向固定导航菜单代码,jQuery和css3响应式垂直固定导航菜单插件

    这是一款非常实用的jQuery和css3响应式垂直固定导航菜单插件.当你的页面上有很多的内容,用户需要花费大量的时间才能找到他们想要的内容.这个垂直固定导航菜单插件能够为页面提供一个内容预览,使用户能 ...

  6. html5响应式导航条,10个响应式设计的导航菜单源码-附教程

    10个响应式设计的导航菜单源码-附教程 Sponsor 在2013年里,响应式Web设计将会开始普及,我们应该学习这些新技术,尤其作为网页设计师和前端开发人员,学习CSS3样式表和HTML5是必不可少 ...

  7. html5 box布局,使用Flexbox打造响应式网页网格布局

    CSS3的Flexbox可以非常容易的制作出各种布局效果.前面我们已经结束了flexbox的基本使用方法,水平布局和垂直布局方法.这篇文章我们来看看如果制作具有响应式效果的flexbox双列网格布局效 ...

  8. 【译】什么是响应式编程

    (原文地址:https://medium.com/@kevalpatel2106/what-is-reactive-programming-da37c1611382) .           现今,人 ...

  9. 响应式多级菜单 侧边菜单栏_大菜单,小屏幕:响应式,多级导航

    响应式多级菜单 侧边菜单栏 如果您曾经在响应式网站上工作,那么毫无疑问,您必须解决这个新兴领域中最棘手的问题之一:导航. 对于简单的导航,解决方案可以很简单. 但是,如果您要处理的事情比较复杂,可能有 ...

最新文章

  1. pta 整型关键字的平方探测法散列
  2. HashTable已经被淘汰了,不要在代码中再使用它
  3. 剑网3 最新服务器,《剑网3》各服务器IP及所在地
  4. std::map用法总结
  5. linux 那些事儿之我是 u 盘,《Linux那些事儿之我是USB》.PDF
  6. Python组合列表中多个整数得到最小整数(一个算法的巧妙实现)
  7. Python语言概述
  8. 如何使用QT实现左右滑动的按钮
  9. 【解决】路由器设置成交换机使用
  10. 【U盘刷机】小米路由器变砖如何100%刷机成功
  11. HTTP响应的内容类型之Content-Type
  12. Python matplotpy颜色表(python画图常用颜色)
  13. Android零基础开发到项目实战
  14. FFmpeg[18] - mac解决yasm/nasm not found or too old. Use --disable-yasm for a crippled build.
  15. GUI线程安全详解(三)
  16. php奥运金牌排序代码,Excel | 用奥运奖牌榜学习排序排名
  17. 树莓派购买指南(新手入门)
  18. maven 爆红,Could not transfer artifact xxx错误解决
  19. 10G网络变压器厂家告诉你10G以太网主要有哪些特点
  20. LeetCode刷题之路:1049. 最后一块石头的重量 II

热门文章

  1. C#学习(10)-----事件
  2. Android 打开网页之CustomTabs
  3. 『政善治』Postman工具 — 18、NewMan的使用
  4. 在小故事中懂得10之内加法减法
  5. 51nod-1299 监狱逃离(贪心)
  6. 青少年软件编程C++一级题库(51-60)
  7. 想要支持扩展的手机浏览器?狐猴浏览器你绝对不能错过
  8. 1000A+B输入输出练习
  9. 通过python获取自己的手机话费_Python批量获取并保存手机号归属地和运营商的示例...
  10. J0ker的CISSP之路: How CISSP(1)