问题标签 [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 投票
2 回答
902 浏览

android - 使用 Android 导航组件动画片段过渡时 Z-Index 冲突

我正在尝试使用Android Navigation而不是片段事务。然而,有一个问题开始变得麻烦。在为新片段使用滑入式动画时,Enter Animation将位于当前片段下方。请务必查看以下视频以查看运行中的错误。
https://youtu.be/gFnXiEyiypM

该错误似乎不是来自Navigation组件,尽管针对此特定问题引入的 hacky 解决方案(thisthis)似乎在Navigation使用时无法修复它。
在官方修复发布之前没有解决方法吗?

0 投票
4 回答
9339 浏览

android - Android Jetpack Navigation 如何处理 Toolbar 和 BottomNavBar 内容

我对导航组件如何适应应用程序行为感到有些困惑。在教程中这一切看起来都很好而且很闪亮,你不会做太复杂的事情,但是在真正的应用程序中实现时,事情似乎有所不同。

导航前

在实现导航之前,我必须手动运行片段事务。为了做到这一点,我的片段将实现一个接口,该接口onFragmentAction将 a 传递bundle给主片段Activity,并在基于动作的活动中,用另一个片段替换当前片段。

需要处理的第二部分是顶部工具栏和BottomAppBar. 例如BottomAppBar,需要FAB在某些片段上以不同方式对齐或隐藏在其他片段中。此外,顶部ToolBar需要在某些上展开或在其他上折叠。为此,我听取FragmentManager.OnBackStackChangedListener并根据片段标签getSupportFragmentManager().getBackStackEntryAt(size - 1).getName()相应地更改布局。

带导航

第一部分似乎很容易做到:传递参数并开始新的片段。但我不知道导航是否可以处理工具栏管理,或者我需要继续从我的活动中管理它。

0 投票
3 回答
3269 浏览

android - 带有 NavigationDrawer 的导航组件

我正在尝试在我的项目中使用导航组件实现 NavigationDrawer。我有一个 MainActivity 作为入口点和多个片段目的地。我已将抽屉菜单项链接到 nav_graph.xml 中的目的地,一切正常。

我的 NavigationDrawer 中有一个“注销”菜单项选项,单击它我正在启动 LoginActivity。我的问题是

  1. 我将 LoginActivity 添加到我的 nav_graph 并将其链接到抽屉中的注销菜单项,这是正确的方法吗?
  2. 启动 LoginActivity 后,当用户按下系统后退按钮时,我希望应用程序转到启动器屏幕而不是堆栈中的先前目的地。这可以通过导航组件实现吗?

这是我的 nav_graph.xml

这是我的drawer_menu.xml

0 投票
2 回答
357 浏览

android - Nav-Framework 很好,但是,每当人们单击抽屉布局上的菜单项时,它都会创建片段的视图

我使用 NavController + DrawerLayout,在抽屉上设置一些菜单项,似乎自动设置了抽屉,很酷。但是,每次我单击抽屉上的一个项目并多次单击同一个项目时,Nav 都会导航到同一个片段,并且每次都会调用 onCreateView,真是太难过了!这是一个明确的错误,因为视图的初始化并不便宜。

任何想法?

问题

0 投票
2 回答
4643 浏览

android - 我可以在导航组件中使用多个 NavHostFragment 吗?

如果您对以下段落有理解困难,请查看我制作的流程图。

我目前正在制作一个带有 3 个顶级目的地的笔记应用程序。顶级目的地之一 (NotesList) 显示用户创建的笔记列表。NotesList 有一个过滤器按钮,它会弹出一个带有 FilterMenu 目标的底部模式表。FilterMenu 有一个搜索按钮,单击时,将工作表的内容替换为搜索目标和一个名为标签的按钮,单击时,将工作表的内容替换为包含与所有注释关联的标签列表的片段(TagList目的地)。

在此处输入图像描述

蓝色的一切都是顶级目的地。紫色的所有内容都存在于模态表中。

FilterMenu、Search 和 TagList 显示在模式表中。这意味着 NotesList包含这些片段并且不会被它们替换。它们存在于比 NotesList 小的屏幕区域中。如果我使用导航,片段将相互替换。

我可以使用两个 NavHost 吗?一个用于顶级目的地,一个用于模式表中的内容?如果是这样,我将如何实施它?如果不是,在这种情况下建议做什么?

0 投票
7 回答
9814 浏览

android - Android Navigation Architecture Component - Nav Drawer Icons

I'm currently using the Android Architecture Component's Navigation, but I'm running into an issue with my Navigation Drawer. It shows the hamburger menu when at my starting destination, but other Fragments are showing the up arrow. I believe I've setup my navigation_graph incorrectly.

Here you can see my nav drawer, showing 2 items, Home and Settings. When in either of these Fragments, you should see the Hamburger icon.

nav drawer

However, when navigating to the Settings Fragment, it shows the Up arrow.

toolbar

navigation.graph.xml

I feel like HomeFragment and SettingsFragment should be related somehow but I'm not sure how to define that.

main_drawer.xml

MainActivity

And then within MainActivity, I just set it up like this. I called setupActionBarWithNavController, but I also have to actually setup the nav drawer myself, and handle the onNavigationItemSelected.

build.gradle

Thanks.

0 投票
2 回答
7304 浏览

android - 导航架构组件 - 如何刷新片段?

我有一个具有 recyclerview 的 ListFragment,并且 onClick 任何项目都会打开 DetailsFragment。详细信息片段在底部包含另一个recyclerview,显示“更多项目”。现在 onClick 任何这些项目都应该打开该特定项目的 DetailsFragment。基本上片段需要刷新。

过去,我只会使用 fragmentManager 替换 Fragment。我该如何刷新片段?如何创建指向同一片段的动作?

0 投票
3 回答
4930 浏览

java - 导航架构组件 - 登录屏幕

我打算像这样实现导航:
在此处输入图像描述
我面临的问题是当用户进入LoginFragmennt并按下返回按钮时,它再次加载LognFragment即。陷入循环。

LoginnFragment根据这个答案导航到使用条件导航。

如何正确实施?

0 投票
1 回答
3081 浏览

back-stack - Android Architecture Navigation - 如何导航到 Nav Graph 构建回栈中的特定位置

我有一个使用 Android Arch Navigation 创建的线性向导,我想在特定位置启动它,就像使用自然用户导航一样构建回栈。所以我尝试了这个深层链接构建:

这种方法的问题是它不能正确构建回栈,因为用户将构建导航步骤 1 -> 步骤 2 -> ... -> 步骤 N 它只包含步骤 1 -> 步骤 N,即开始目的地和导航图的目标目的地。这不是我想要的。

第二种简单的方法是多次调用navigate()on navController。但是看起来很简单却行不通

它导航正确,但创建的返回堆栈很奇怪,即返回按钮似乎工作,但onNavigatedListener监听器来自

没有正确调用。所以我不能听向导中的片段变化。此外,NavController 似乎已中断,因为连续按钮侦听器的 navController.navigate(actionId) 会引发错误。

java.lang.IllegalArgumentException:此 NavController 未知导航目的地

更新!

用调试器拦截 onBackPressed() 似乎表明 Back Button Press 没有调用 navController.popBackStack() 并且 navController.currentDestination 属性没有改变。但是在 NavHostFragment 内部,片段正在发生变化。

0 投票
0 回答
642 浏览

searchview - 导航架构组件 - 使用 SearchView 进行搜索

我研究了许多关于此的帖子和文章,但无法得到一个好的答案。

我在使用导航架构组件实现搜索时遇到了问题。我有一个 MainActivity、mainFragment 和一个 searchFragment。mainFragment 在我的 navigationGraph 中设置为目的地。我有这些疑问 1. 搜索应该成为活动或 mainFragment 的一部分,什么是正确的方法。2. 如果搜索是活动的一部分,那么为我的搜索处理向上按钮就会成为问题。搜索上的向上按钮退出 MainActivity,不在 mainFragment 中。我在想 NavController 应该有包含 mainFragment 然后是 searchFragment 的堆栈,一旦你按下 searchFragment 中的向上按钮,它应该弹出并且 mainFragment 应该显示。看起来我错过了一些东西。