首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用嵌套navGraph和底部导航视图进行导航

如何使用嵌套navGraph和底部导航视图进行导航
EN

Stack Overflow用户
提问于 2020-05-08 02:14:43
回答 2查看 2.2K关注 0票数 10

我有3个项目的底部导航视图,我的navGraph看起来像这样:

代码语言:javascript
复制
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
app:startDestination="@id/nested_navigation"

<navigation
    android:id="@+id/nested_navigation"
    app:startDestination="@id/mainFragment" >
    <fragment
        android:id="@+id/mainFragment"
        android:name="com.example.app.ui.main.MainFragment"
        android:label="main_fragment"
        tools:layout="@layout/main_fragment" />
    <fragment
        android:id="@+id/list"
        android:name="com.example.app.ui.main.List"
        android:label="fragment_news_list"
        tools:layout="@layout/fragment_list" />
</navigation>

<fragment
    android:id="@+id/settings"
    android:name="com.example.app.ui.main.Settings"
    android:label="Settings" />
</navigation>

底部导航视图中包含嵌套的navGraph片段的导航工作正常,但如果我导航到嵌套navGraph之外的settings_fragment,并单击其他项/片段,则无法导航到其他片段,基本上停留在此屏幕上。

我检查了一下,如果我将settings_fragment放在嵌套的navGraph中,会发生什么情况,它工作得很好。

我如何解决这个问题?

顺便说一句,我很确定这是不相关的,但是设置片段是PreferenceScreen布局,它位于XML资源中,而不是布局资源。

我的菜单项:

代码语言:javascript
复制
<item
    android:id="@+id/mainFragment"
    android:icon="@drawable/ic_home_black_24dp"
    android:title="@string/home"
    app:showAsAction="ifRoom"
    />
<item
    android:id="@+id/list"
    android:icon="@drawable/ic_format_list_bulleted_black_24dp"
    android:title="@string/news_list"
    app:showAsAction="ifRoom"
    />
<item
    android:id="@+id/settings"
    android:icon="@drawable/ic_settings_black_24dp"
    android:title="@string/settings"
    app:showAsAction="ifRoom"
    />
EN

回答 2

Stack Overflow用户

发布于 2020-05-08 06:13:48

问题在于你的导航图的结构。

底部导航将只考虑根元素。

代码语言:javascript
复制
- nested_navigation (root element) defaults to `mainFragment`
 |- mainFragment (child element)
 |- list (child element)
- settings (root element)

因此,根据上面的图示,您将只能利用底部导航在settingsnested_navigation之间导航,而后者将是mainFragment

如果你要在settingslist之间导航,那是不可能的。

请注意,菜单项的id必须与图形目的地的id匹配。

例如。

代码语言:javascript
复制
<item
    android:id="@+id/nested_navigation"
    android:icon="@drawable/ic_home_black_24dp"
    android:title="@string/home"
    app:showAsAction="ifRoom" />

<item
    android:id="@+id/settings"
    android:icon="@drawable/ic_settings_black_24dp"
    android:title="@string/settings"
    app:showAsAction="ifRoom" />

注意:这两个元素的idroot目的地的id完全匹配。

Extra

也许我的另一个答案可能对补充导航流程-> How to switch to other fragment in different back stack using Navigation Component? 有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2021-07-10 00:08:48

底部导航将只考虑根元素。您可以在菜单中重命名该项目,与在导航图中相同。

例如。您嵌套的图形名称是homeNavigation ->,让菜单中的名称id是homeNavigation。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61664861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档