导航体系结构仅具有上下文的组件导航

时间:2019-02-13 00:59:07

标签: android navigation android-architecture-components android-jetpack

是否可以获取NavigationController并仅使用上下文执行导航?现在看来没有。这将需要对我们的应用程序进行如此重大的重组,以至于我必须丢失一些东西。

如果用户已注销,则需要导航到LoginFragment。此注销检查发生在不是活动或片段的多个位置。例如,在OkHttpClient中使用的身份验证器。

当前这很好,因为您可以从任何地方访问ApplicationContext,这就是创建Intent,使用startActivity并在backStack顶部添加新Activity所需的全部。

1 个答案:

答案 0 :(得分:0)

按照Implementing Navigation documentation

  

注意:“导航”组件是为具有一项主要活动且具有多个“片段”目标的应用程序设计的。主要活动托管导航图,并负责根据需要交换目标。在具有多个活动目标的应用中,每个其他活动都会承载自己的导航图。

因此,没有。整个应用程序不存在全局NavController-每个活动都将具有自己的NavController和关联的导航图。

但是,您无需一次将整个应用都切换到“导航”。根据{{​​3}},您可以一次转换一个活动,就可以像以前一样继续针对此特定情况使用单独的登录活动。

内置的<activity>目的地支持为您提供了帮助,这些目的地是您navigate()到目的地时执行startActivity()而不是FragmentTransaction的目的地。如果您希望将UI上的“登录”按钮绑定到开始登录活动,这将非常有用。

尽管有Migrate to Navigation documentation所解释的向单一活动模型过渡的很好理由,但Single Activity: Why, When, and How talk确实强调了这一点:

  

如果您发现自己在扭曲自己的经历并且对您没有意义,请不要这样做。如果有什么用的话,那很好。保持工作。但是,如果您发现遇到问题,行为不一致,或者想要执行诸如共享ViewModels之类的事情,也许是时候考虑转向单一的Activity结构了。