Flow,Cicerone,Fragnav,Simple-stack的功能以及何时使用它们?

问题描述 投票:0回答:1

我在具有3个标签的应用程序中使用BottomNavigationView。我想像导航一样实现instagram,保存每个部分的片段状态。首先,我使用了导航组件,但是很难保存每个选项卡(部分)的状态。然后我找到了一些库,例如流程库,cicerone库,fragnav库,简单堆栈库。

流量,西塞隆,fragnav,简单堆叠的特点以及何时使用它们?

我有2个活动和MainActivity。 Mvvm架构,dagger2,kotlin

android kotlin bottomnavigationview
1个回答
0
投票

我看到这个问题有点晚了,我是Simple-Stack的维护者,并且通过一些精心的搜索发现了这个问题。

无论如何

首先,我使用导航组件,但是很难保存每个选项卡(部分)的状态。

[从技术上讲,他们制作了this large block of code,您可以包含它,现在可以管理N个navHostFragments,因此在一个应用程序中具有多个后置堆栈。

不确定它是否可以很好地缩放,但是它确实可以在轮换和死亡过程中起作用。

square/flow

流程已死,Square现在可以在工作流程上工作。

但是Flow最初是一种跟踪屏幕列表[Screen1, Screen2]的解决方案,并使该配置在配置更改和过程终止后仍然有效。他们还允许您以异步方式处理诸如[Screen1, Screen2]-> [Screen1, Screen2, Screen3]之类的更改(完成后必须调用完成回调)。

它具有范围界定支持的某些元素。

Cicerone

Cicerone排队导航命令,但没有人注册处理它们。

否则,它具有一些开箱即用的导航命令,可以在某种程度上简化片段/活动导航。

Fragnav

FragNav在构建时就考虑了多堆栈支持。从理论上讲,它最多跟踪5个底部导航选项卡的片段堆栈。

简单堆栈

简单堆栈被编写为square/flow的重写和替代:1个堆栈,异步状态转换支持,使导航操作排队,而没有人可以处理它们,在配置更改和过程中持久/恢复导航状态死亡。

Flow和Simple-Stack之间的主要区别是:

  • API命名约定(Flow具有一些棘手的名称,例如“ Dispatcher”和“ Traversal”,它们在简单的堆栈中称为StateChangerStateChange

  • 更简单的生命周期集成(不再覆盖attachBaseContext

  • [[全新的作用域支持,可以轻松地在屏幕之间共享数据,并在进程终止时持久/恢复这些“范围服务”的状态,同时获得有关创建/销毁的重要生命周期回调(类似于ViewModels)
  • 完成:流程保留为“ alpha”版本,不再保留。


Flow和Simple-Stack都是为了使Single Activity应用易于开发而构建的。 Jetpack Navigation也是如此。

[Jetpack Navigation和Simple-Stack都允许创建“屏幕之间共享的范围”,JN使用navgraph范围的视图模型来完成,而SS则使用范围服务来进行。

无论如何,多堆栈都是一件痛苦的事情,FragNav开箱即用地直接支持它,而简单堆栈has a sample for it(Jetpack Navigation也为has a sample for it


选择似乎可以用最少的摩擦为您解决最多问题的工具。
© www.soinside.com 2019 - 2024. All rights reserved.