问题标签 [android-navigation-graph]
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.
android - 如何使用导航 ui 组件中的底部工作表对话框
我正在使用导航图进行内部导航。现在我想使用 nav_graph 打开一个底部工作表对话框片段。
我尝试添加
但是当我启动它时,我的应用程序崩溃了。崩溃报告
android - 如何在几个已经创建的片段中更改 defaultNavHost?
我的活动中有几个片段,每个片段都有自己的Navigation Graph
,它们是在创建活动时创建的。我想知道的是如何选择它们中的任何一个作为它们被创建之后defaultNavHost
或PrimaryNavigationFragment
之后?
下面的代码创建它们并将它们设置为默认值,但我不想每次都重新创建它们。我怎样才能做到这一点?
android - Android Navigation Graph 继续 api 调用问题
我在我的android项目中使用了导航图。在我的项目中,底部导航视图中包含3个片段注册、登录和主页片段。在主页片段中调用api来获取记录列表。当我每次导航该片段时,它都会调用api。我想在第一次导航时调用该 api。关闭并重新打开应用程序后,它调用 api。如何使用带有 MVVM 架构的导航图来实现此功能?
android - 如何使用共享的 ViewModel,并避免每次与导航组件重用它的同一个实例
我的应用由一个Activity
和多个组成Fragments
,遵循“单个 Activity 应用模型”,因此我可以使用Navigation Component
Android 中的 正确导航jetpack
。
我的大多数屏幕 ( Fragments
) 都是独立的,不相互依赖,因此它们使用自己的ViewModel
有些功能需要涉及多个导航Fragment
。由于这些功能在它们之间共享通过 来回传递的数据Fragments
,因此我使用共享的 ViewModel(如 Google 推荐的那样)。我需要ViewModel
在所有关联中使用相同的共享实例Fragments
,因为我需要Fragments
共享共享的状态ViewModel
。
ViewModel
要在这些关联中使用相同的实例Fragments
,我需要在从以下获取时创建ViewModel
使用父级Activity
(而不是Fragment
):ViewModel
ViewModelProviders
但是,这可行,它会产生一个问题:当连续导航到Fragment
需要 shared的第一个时ViewModel
,ViewModelProviders.of()
将返回与ViewModel
以前相同的实例:在ViewModel
之间共享Fragments
,但也在不同导航之间实现了类似的功能这个。
我理解为什么会发生这种情况(Android 将 ViewModel 存储在 a中,在请求withmap
时正在使用它),但我不知道我应该如何正确实现“共享 ViewModel 模式”。ViewModel
ViewModelProviders.of()
我看到的唯一解决方法是:
- 为使用共享
Activity
功能的功能创建一个不同的Fragment
ViewModel
- 使用嵌套,并为使用共享的功能
Fragments
使用公共父级Fragment
Fragment
ViewModel
使用这两个选项,我将能够创建一个ViewModel
将Fragments
在功能干预之间共享,并且每次导航到该功能时都会有所不同。
我在这里看到的问题是,这似乎Navigation Component
与单个Activity
应用程序的基本原理背道而驰。以这种方式实现的每个功能都需要具有不同的导航图,因为它们将使用不同的导航主机。这会阻止我使用Navigation Component
.
实现我想要的正确方法是什么?我错过了什么,还是它就是这样?
之前Navigation Component
我会使用不同的Activities
andFragments
和使用与/Dagger
关联的范围来实现这一点。但我不确定只用一个 Activity 来实现它的最佳方法是什么Activity
Fragment
android - 使用导航组件将参数安全地传递给嵌套图
我正在使用 Android Jetpack 导航组件。我有一个带有 id 的嵌套导航图,比如嵌套图R.id.nested_graph
的第一个Fragment
接收一个参数。
如何使用安全 args将参数传递给嵌套图?
目前,我需要在包中手动传递参数,使用直接接收嵌套图 id 的 API:
我想使用安全的参数,并执行以下操作:
但是在尝试这样做时,我在构建时收到以下错误:
问题是导航图预处理正在生成工厂方法来创建NavDirections
对象,而签名中没有所需的参数。
嵌套图的声明如下所示:
android - Android NavigationUI startDestination 类(不是 ID)以编程方式
我需要根据条件以编程方式设置导航图的起始目的地。我有 Fragment0,还有 Fragment1、Fragment2、... FragmentN 都扩展了 Fragment0,并且所有这些(包括 Fragment0)都能够成为希望的起始目的地。
我已经知道有来自 NavGraph 的方法称为
但这对我没有用,因为如果我没记错的话,它需要在 xml 导航文件中声明所有这些fragment0...N节点。
所以,我想要的是,在 xml 文件中只有一个片段节点,并且能够以编程方式设置类(在我的例子中是一个片段),在正常情况下,您可以通过设计/文本选项卡指示android studio 并显示如下:
android - Android 导航组件活动意图标志
我已经创建了从片段到活动的导航操作,但我无法清除后台堆栈。当我执行从片段到新活动的导航操作并按下后退按钮时,我会回到上一个活动和上一个片段。我无法使用导航图设置 Intent 标志来清除后台堆栈中的先前活动。
从片段导航到新活动时, PopTo和Inclusive标志对后退按钮没有影响,即使它们可以在图形编辑器中设置。我可以使用后退按钮导航到堆栈中不再需要的上一个活动。
在迁移到导航图之前,我可以使用 Intent 标志指定此行为:
如何使用导航图实现相同的目标?
android - 未使用导航组件将片段添加到后台堆栈
信息:
我以编程NavHostFragment
方式为应用程序的每个功能插入一个。每个NavHostFragment
都有自己的导航图。Dagger 通过使用FragmentFactory
特定于每个功能的特性来提供它们。它是具有 MVVM 架构的Single Activity结构。
回购:https ://github.com/mitchtabian/DaggerMultiFeature/tree/nav-component-backstack-bug
签出分支“nav-component-backstack-bug”。
问题
导航到图表时,片段不会被添加到后台堆栈。添加的唯一片段是最近访问过的片段。因此堆栈大小始终保持为 1。
最初我认为这是因为我没有将其设置FragmentFactory
为,ChildFragmentManager
但这并没有改变任何东西。请参阅下面的代码片段以获取相关代码。或者签出项目并运行它。我有日志打印出当前在后台堆栈中的片段ChildFragmentManager
,还有SupportFragmentManager
. 两者的大小都为 1。
Feature1NavHostFragment.kt
这是习惯之一NavHostFragment
。伴随对象中的create()
函数是我创建它们的方式。
MainActivity.kt
这是我如何NavHostFragment
在 MainActivity 中创建 's 的示例。
Feature1MainFragment.kt
这是我如何导航到图中的其他片段的示例。
概括
就像我说的,在每个片段中,我都在为ChildFragmentManager
和打印 backstack SupportFragmentManager
。两者都有一个恒定的大小。当我导航到图表而不是添加到堆栈中时,就好像片段正在被替换。
无论如何,感谢您阅读本文,我将不胜感激。
android - BottomSheetDialogFragment 中的 NavigationComponent 导航
Android 的导航组件可以用于在底部表内导航(即在单个底部表中替换/添加片段)吗?
我知道如何在导航图中BottomSheetDialogFragment
使用标签启动。<dialog>
例如,下面nav_graph.xml
允许用户从一个BottomSheetDialogFragment
(fragmentOne) 导航到另一个BottomSheetDialogFragment
(fragmentTwo)。FragmentTwo 在 FragmentOne 的 BottomSheet 上作为第二个 BottomSheet 打开。
但是,如果我想让 fragmentTwo 在同一个 BottomSheet 中替换 fragmentOne 怎么办?我将如何使用导航图完成此操作?
演示(这不是我想要的。我不想要一个底部表打开另一个底部表