- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在处理多个 NavHost 时遇到问题。这个问题和问的 here 非常相似。 .我认为这个问题的解决方案也会对我有所帮助,但这是 2017 年的帖子,仍然没有答案。 Android 开发者文档没有帮助,通过网络搜索绝对没有任何帮助。
所以基本上我有一个 Activity 和两个 fragment 。让我们称呼他们
FruitsActivity, FruitListFragment, FruitDetailFragment,其中 FruitsActivity 没有相关代码,其xml布局由<fragment>
组成标签,作为NavHost
, 像那样:
<fragment
android:id="@+id/fragmentContainer"
android:name="androidx.navigation.fragment.NavHostFragment"
app:navGraph="@navigation/fruits_nav_graph"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
findNavController().navigate(...)
我可以随意浏览 fragment 。但是当我在横向模式下使用平板电脑时,我正在使用该主详细信息流在同一屏幕上显示列表和详细信息。有一个例子说明它是如何工作的
here ,并且我希望 GalleryFragment 替换 FruitDetailFragment,与水果列表共享屏幕,但到目前为止我只能设法使其替换“主导航”流程,占据整个屏幕并将 FruitListFragment 发送到 Back Stack .
findNavController()
方法,但无论我从哪里调用它,我都只能得到相同的
NavController
一直以来,它总是以相同的线性方式导航。
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
android:id="@+id/fragmentContainer"
android:name="androidx.navigation.fragment.NavHostFragment"
app:navGraph="@navigation/listing_nav_graph"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</FrameLayout>
</layout>
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvFruits"
android:layout_weight="3"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="8dp"/>
<FrameLayout
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
android:id="@+id/sideFragmentContainer"
android:name="fruits.example.FruitDetailFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</FrameLayout>
</LinearLayout>
</RelativeLayout>
</layout>
<fragment>
id 'sideFragmentContainer' 而不是整个屏幕(而不是替换 Activity 的 xml 中 id
<fragment>
的
fragmentContainer
)。
<fragment>
的任何解释。里面
<fragment>
.
最佳答案
正如 jsmyth886 所建议的那样, this blog post为我指明了正确的方向。
诀窍是findFragmentById()
获取 NavHost
直接从 fragment 容器(在这种情况下,与主细节屏幕的其余部分共享屏幕)。这使我能够访问正确的 NavController
并按预期导航。
创建第二个 NavGraph
很重要也。
所以快速一步一步:
NavGraph
进行所有通常的导航(如果没有 Master Detail Flow,它将如何工作); NavGraph
仅包含可能的 Destinations
Master Detail fragment 将访问。没有 Actions
然后连接,只需 Destinations
. <fragment>
容器,设置如下属性:
<fragment
android:id="@+id/fragmentContainer"
android:name="androidx.navigation.fragment.NavHostFragment"
app:navGraph="@navigation/main_nav_graph"
app:defaultNavHost="true"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
app:defaultNavHost="true"
很重要。然后主从布局将如下所示:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvFruits"
android:layout_weight="3"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="8dp"/>
<FrameLayout
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
android:id="@+id/sideFragmentContainer"
android:name="androidx.navigation.fragment.NavHostFragment"
app:navGraph="@navigation/secondary_nav_graph"
app:defaultNavHost="false"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</FrameLayout>
</LinearLayout>
</RelativeLayout>
</layout>
app:defaultNavGraph
很重要,这里设置为false。 MutableLiveData
在我的ViewModel
,这样我可以观察它并相应地更改布局。 findNavController().navigate(R.id.your_action_id_from_detail_to_some_other_fragment)
.主导航将使用主 NavController
; NavHost
和 NavController
通过查找 <fragment>
包含它,就像这样:val navHostFragment = childFragmentManager.findFragmentById(R.id. sideFragmentContainer) as NavHostFragment
navHostFragment.navController.navigate(R.id.id_of_the_destination)
导航到要显示的 fragment ,将屏幕与主从屏幕的其余部分分开。 .请注意,这里我们不调用 Actions
,我们称之为Destination
直接地。 关于android - 如何处理多个 NavHosts/NavControllers?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56804449/
我正在编写一个 iPhone 应用程序,但我遇到了一个关于如何管理 View 呈现的问题。事实上,当用户启动应用程序时,会出现一个包含搜索表单的“主页” View 。当用户按下“搜索”按钮时,我想要一
我正在尝试从 VC 转换为嵌入在导航 Controller 中的 VC。 就我的目的而言,这两行代码似乎完成了同一件事,但我想知道它们之间的真正区别是什么以及一个是否对另一个有利。 为此... if
我基本上是在等待 5 秒后尝试导航到其他 fragment 。当我在 onViewCreated 中执行导航过程时,它可以工作,但是当我在 onFinish 中执行时,它给了我下面的错误。 我试图将
我在我的应用程序中使用导航组件,最近它工作正常但是在将项目更新到 AndroidX 之后我收到错误消息 navigation destination DESTINATION_NAME is unkno
我不确定我在这里做错了什么。简单的设置,带有由内部底部栏控制的 fragment 的单个 Activity ,到目前为止一切都很好。开始 fragment 有一个按钮,里面应该导航到另一个 fragm
我正在制作应用程序,它支持不同的设备方向。导航由 Android Jetpack 的 Navigation 进行。横向应用程序主屏幕如下所示。它是列表包装 fragment (它是 NavHostFr
我正在使用新的 android Storyboard来创建应用程序。流程需要如下所示: SplashFragment -> Fragment1 -> Fragment2 以下是 Storyboard(
我正在实现 Espresso 测试。我正在使用带有 NavGraph 范围 ViewModel 的 fragment 。问题是,当我尝试测试 Fragment 时,我得到了一个 IllegalStat
我想将导航 Controller 栏按钮项设置为图像。 我已阅读以下内容 - Add image to a navigationItem's title 我了解如何将其设置为图像。我实际上希望将其设置
我想实现 addOnDestinationChangedListener,但是没有成功。我已经尝试自己实现它,但是 ID 不匹配 NavController mController = Navigat
我基本上为底部导航 View 设置了 3 个 fragment ,所有 fragment 都链接到 activity.xml activity.xml 我放 fragment 标签的地方。 我的 A
试图效仿https://developer.android.com/guide/navigation/navigation-testing ,我有一个预期的错误 org.mockito.excepti
我目前在我的项目中使用 Android 导航架构。它具有可以使用快捷方式启动任何 fragment 的功能。目前我正在使用 NavController 在单击快捷方式时导航到所需的目的地。 但是当我多
我正在寻找的是我的 fragment 是否已经在后堆栈中。 例如,我导航到 Fragment A 到 Fragment B。稍后,我导航到 Fragment B 到 Fragment C。现在,我想
我正在使用导航组件在我的应用程序中导航。它在 fragment 内工作正常,但无法在包含实际导航主机的 Activity 中找到导航主机。 当用户单击 FAB 时,我试图打开一个新 fragment
我在处理多个 NavHost 时遇到问题。这个问题和问的 here 非常相似。 .我认为这个问题的解决方案也会对我有所帮助,但这是 2017 年的帖子,仍然没有答案。 Android 开发者文档没有帮
我在移动应用程序中使用 NavController,其中有一个 fragment ,其中有两个到另一个 fragment 的导航选项。我已在 mobile_navigation.xml 中创建了这两个
我以两种不同的方式在 fragment 之间提供数据传输,第一种是正常工作,而安全数据类型会导致运行时崩溃。我正在使用那个 Android 文档: https://developer.android.
我创建了 AuthHttpProvider,它是一个 Http 包装器,它允许发送 GET/POST/PUT/DELETE 请求并自动向每个请求添加身份验证 token (jwt)。我在我所有的 io
我从侧边菜单启动器启动了一个 ionic 2 应用程序。现在我想将生成的代码移动到应用程序组件(菜单)到一个文件夹中,然后编写一个主组件。当我运行该应用程序时,它向我显示此错误: 原始异常(excep
我是一名优秀的程序员,十分优秀!