我有3个项目的底部导航视图,我的navGraph看起来像这样:
<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资源中,而不是布局资源。
我的菜单项:
<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"
/>发布于 2020-05-08 06:13:48
问题在于你的导航图的结构。
底部导航将只考虑根元素。
- nested_navigation (root element) defaults to `mainFragment`
|- mainFragment (child element)
|- list (child element)
- settings (root element)因此,根据上面的图示,您将只能利用底部导航在settings和nested_navigation之间导航,而后者将是mainFragment。
如果你要在settings和list之间导航,那是不可能的。
请注意,菜单项的id必须与图形目的地的id匹配。
例如。
<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" />注意:这两个元素的id与root目的地的id完全匹配。
Extra
也许我的另一个答案可能对补充导航流程-> How to switch to other fragment in different back stack using Navigation Component? 有所帮助。
发布于 2021-07-10 00:08:48
底部导航将只考虑根元素。您可以在菜单中重命名该项目,与在导航图中相同。
例如。您嵌套的图形名称是homeNavigation ->,让菜单中的名称id是homeNavigation。
https://stackoverflow.com/questions/61664861
复制相似问题