Ben*_*tor 1 android kotlin bottomnavigationview
我在我的应用程序中使用 BottomNavigationView 和 3 个选项卡。我想实现类似导航的 Instagram,保存每个部分片段状态。首先我使用导航组件,但很难保存每个选项卡(部分)的状态。然后我找到了一些库,比如 flow、cicerone、fragnav、simple-stack。
flow、cicerone、fragnav、simple-stack 的特点是什么以及何时使用它们?
我有 2 个活动和 MainActivity。Mvvm 架构、dagger2、kotlin
我看到这个问题有点晚了,我是 Simple-Stack 的维护者,通过一些精心的搜索发现了这个问题。
反正,
首先我使用导航组件,但很难保存每个选项卡(部分)的状态。
从技术上讲,他们制作了这一大块代码,您可以将其包含在内,现在可以让您管理 N 个 navHostFragments,因此在一个应用程序中有多个后台堆栈。
我不确定它是否可以很好地扩展,但它确实可以跨轮换和进程死亡。
square/flow
Flow 已死,Square 现在在 Workflow 上工作。
但 Flow 最初是一个解决方案,用于跟踪屏幕列表[Screen1, Screen2]并使其在配置更改和进程死亡中幸免于难。它们还允许您以异步方式处理诸如[Screen1, Screen2]-> 之类的更改[Screen1, Screen2, Screen3](完成后必须调用完成回调)。
它有一些范围界定支持的元素。我试过了,但无法让它发挥作用。
西塞龙
Cicerone 将导航命令排入队列,而没有人注册来处理它们。
否则,它有一些开箱即用的导航命令,以在一定程度上简化片段/活动导航。
弗拉格纳夫
FragNav 的构建考虑到了多堆栈支持。理论上,它最多跟踪 5 个底部导航选项卡的片段堆栈。
简单堆栈
编写 Simple-Stack 是为了重写和替换square/flow打算做的事情:1 个堆栈、异步状态转换支持、将导航操作排入队列而没有人可以处理它们、跨配置更改和进程死亡保持/恢复导航状态。
Flow 和 Simple-Stack 之间的主要区别是:
API 命名约定(Flow 有一些棘手的名称,例如“Dispatcher”和“Traversal”,它们在简单堆栈中调用StateChanger和StateChange)
更简单的生命周期集成(不再覆盖attachBaseContext)
全新的范围支持,能够轻松地在屏幕之间共享数据,并在进程死亡时保留/恢复这些“范围服务”的状态,同时获得有关创建/销毁的重要生命周期回调(有点像 ViewModel)
完成:流程被保留为“alpha”版本,不再维护。
Flow 和 Simple-Stack 都是为了使 Single Activity 应用程序更易于开发而构建的。Jetpack Navigation 也是如此。
Jetpack Navigation 和 Simple-Stack 都允许创建“在屏幕之间共享的范围”,JN 使用导航图范围的视图模型来实现,而 SS 使用范围服务来实现。
Multi-stack 无论如何都有些痛苦,FragNav 直接支持它开箱即用,simple-stack有一个示例(Jetpack Navigation 也有一个示例)。
选择任何看起来能以最小摩擦为您解决最多问题的工具。
| 归档时间: |
|
| 查看次数: |
456 次 |
| 最近记录: |