问题标签 [android-architecture-navigation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
336 浏览

android - 导航架构组件是否有与 commitAllowingStateLoss 等效的方法?

我正在将我的代码迁移到新的 Nav 库,但我想要一些相当于commitAllowingStateLossFragmentTransaction 中的代码。有小费吗?

提前致谢!

0 投票
8 回答
19584 浏览

android-architecture-components - 在导航组件的起始目的地时如何处理后退按钮

我已经开始使用新的导航组件,我真的很喜欢它!我确实有一个问题 - 当我在图表的起始目的地时,我应该如何处理后退按钮?

这是我现在使用的代码:

当我在图表上的任何位置时,它都工作得很好,它把我送回去,但是当我在它的开始时——应用程序崩溃了,因为后台堆栈是空的。

这一切对我来说都很有意义,我只是不知道如何处理它。

虽然我可以检查当前片段的 ID 是否与我知道是图根的 ID 相同,但我正在寻找一种更优雅的解决方案,例如图表中当前位置的布尔标志是否是起始位置与否。

想法?

0 投票
2 回答
2221 浏览

android-viewmodel - Android Navigation 组件与 Viewmodel 的交互会如何?

Android Viewmodel 可以具有 Activity 或 Fragment 的范围/生命周期,但是这将如何在 Navigation 组件中工作?

考虑我是否有以下情况:

在上述场景中,是否可以为 CustomerDetailFragment 和 CustomerContactFragment 共享同一个 CustomerViewModel 实例?

如果我没有使用导航组件,我可以让 CustomerDetailsFragment 成为一个活动并将我的视图模型初始化为该活动,但是由于在导航中我们只有片段,我怎样才能最好地实现这一点?

我虽然:

但是如何将视图模型的这个实例传递给 CustomerDetailFragment 和 CustomerContactFragment?

还是有更好的方法来构造上面的代码以达到相同的结果?

0 投票
1 回答
1310 浏览

android - onSaveInstanceState 之后的 Androidx Navigation IllegalStateException

我有一个使用 AndroidX 导航库的应用程序,但我的行为很奇怪。特别是在我的应用程序进入/退出后台时。这里有两个例子:

  1. 在片段中的一个简单的点击监听器中,我有:

(科特林)

由此,我看到崩溃说它在IllegalStateException运行之后抛出了一个onSaveInstanceState

  1. 我有一个ViewModel关联,Fragment我将我的观察者注册到片段视图的生命周期。这意味着我会在onStart. 一些关键事件,例如登录状态决定了应用的导航。就我而言,我有一个启动屏幕,可以转到登录屏幕或主屏幕。用户完成登录后,我会重置导航(将我带回初始屏​​幕)。现在身份验证状态已准备就绪,我想导航到主片段,这通常会引发错误,因为onResume必须在FragmentManager被认为已准备好之前调用。我收到一条错误消息,提示我正在进行交易,无法添加新交易。为了解决这个问题,我不得不编写这段奇怪的代码:

(科特林)

有谁知道我如何让导航控制器在片段生命周期中发挥出色而无需添加这些变通方法?

0 投票
2 回答
1599 浏览

android - (Android Studio 3.2 Beta) - 导航架构组件配置

我想尝试新的导航架构组件功能,因此我遵循了本教程:https ://www.youtube.com/watch?v=GOpeBbfyb6s 。

我正在使用 Android Studio 3.2 Beta 1。我安装了必要的依赖项,但是当我尝试在项目中创建导航 Android 资源文件时,就像在上面的视频中一样,导航选项不会出现在选择菜单中。

我的问题:

尝试创建Navigation Android Resource File时没有可供选择的Navigation选项。我错过了安装中的任何步骤吗?

预期结果:

在此处输入图像描述

我的情况:

没有可供选择的导航选项

我的 build.gradle

0 投票
2 回答
1146 浏览

android - 导航组件的多个容器

是否可以在两个(或更多)容器之间共享导航图?我想要实现的是拥有两个容器(NavHosts):

  • 一个较小的,位于底部导航上方和工具栏下方
  • 二是全屏。

我想要一个导航图,因为来自一个容器的片段可以触发来自另一个容器的操作。否则它(有更多相互交互的导航图)将变得不整洁,图书馆产生的问题将超越优势。

0 投票
1 回答
3650 浏览

android - Android 导航架构组件 - 导航架构组件是否意味着仅使用单个活动?

我目前正在学习新的Android 导航架构组件 (https://developer.android.com/topic/libraries/architecture/navigation/)。

我有点混淆它的动机和概念,这是我的不确定性:

  1. Android 导航架构组件是否旨在消除在单个应用程序中使用多个 Activity 的需要?这意味着,整个应用程序只需要一个单一的活动,而所有其他页面都将是片段?
  2. 在应用程序中使用多个活动,但同时使用Android 导航架构组件来导航 Fragment 是否实际上违反了Android 导航架构组件的目的?

问题 2 的示例场景

在此处输入图像描述

0 投票
1 回答
2677 浏览

android - 条件片段和导航重用

给定 N 个片段,代表同一实体的不同 UI。片段有条件地显示。该条件仅在运行时已知。每个片段应该有相同的导航流程。

如何使用导航架构组件 XML 图从片段中概括/抽象导航流以进一步重用?目前,我只看到为每个片段创建单独的目的地或嵌套导航的方式,但在重用方面这是一个糟糕的想法。另一种选择是在 Kotlin/Java 代码中进行所有条件转换,但在这种情况下,应用程序的流程将不会在导航图模式中描述。有没有更好的方法来重用导航?

官方文档在这个主题上很模糊:https ://developer.android.com/topic/libraries/architecture/navigation/navigation-conditional

0 投票
40 回答
84865 浏览

android - IllegalArgumentException:此 NavController 未知导航目的地 xxx

当我尝试从一个 Fragment 导航到另一个 Fragment 时,我遇到了新的 Android Navigation Architecture 组件的问题,我收到了这个奇怪的错误:

除了这个特定的导航之外,其他所有导航都可以正常工作。

我使用findNavController()Fragment 的功能来访问NavController.

任何帮助将不胜感激。

0 投票
4 回答
4557 浏览

android - 导航上的片段生命周期重叠

我有一个Activity应用程序,其中多个应用程序Fragments正在使用导航组件进行切换。当我在两个片段之间切换时,它们的onCreate()onDestroy()方法似乎重叠。因此,当片段访问相同的全局对象时,我很难为片段编写初始化和清理代码。

Framgent_A从到导航Fragment_B具有以下方法顺序:

Fragment_A.onDestroy()我反转我在Fragment_A.onCreate(). 在我希望事情被调用Fragment_B时处于中立状态。onCreate()然而,情况并非如此,因为Fragment_A.onDestroy()尚未调用。

Android上的重叠是正常的还是我在导航组件中配置了错误?有没有另一种方法可以实现我想要做的事情?我知道我可以将两者结合Fragments起来并使其工作,但我不希望任何一个 Fragment 彼此了解。对我来说,在创建时Framgnet_A仍然活着,应该替换时似乎很奇怪。Fragment_BFragment_BFragment_A

任何帮助是极大的赞赏!


编辑:

在调试时浏览源代码后,我发现在FragmentNavigator.navigate() FragmentTransaction.setReorderingAllowed()被调用,它允许重新排序操作,甚至允许在前onCreate()一个片段之前调用新片段onDestroy()。问题仍然存在,在下一个 Fragment 中初始化相同的全局状态之前,如何解决我在一个 Fragment 中正确清理全局状态的问题。