1. Toolbar/ActionBar设置
下面的代码, 可以将导航器 navController 与 Toolbar/ActionBar 绑定.
setupActionBarWithNavController(navController, appBarConfiguration)
但是, 如果Activity 使用了Toolbar, 就需要将其使用的Theme设置为noActionBar:
<item name="windowActionBar">false</item>
否则就会报错.
2. menu与navigation中的id匹配
如果BottomNavigationView或其它组件使用了menu:
<com.google.android.material.bottomnavigation.BottomNavigationView
...
app:menu="@menu/tab_menu" />
而充当容器的fragment设置了navGraph:
<fragment
android:id="@+id/nav_host_fragment"
...
android:name="androidx.navigation.fragment.NavHostFragment"
app:defaultNavHost="true"
app:navGraph="@navigation/mobile_navigation"
/>
请注意 tab_menu 和mobile_navigation 中的id 必须匹配:
menu:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_home"
android:icon="@drawable/tabbar_home"
android:title="@string/menu_home" />
<item
android:id="@+id/menu_categories"
android:icon="@drawable/tab_bar_category_ic"
android:title="@string/menu_categories" />
</menu>
navigation:
<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"
android:id="@+id/mobile_navigation"
app:startDestination="@+id/menu_home">
<fragment
android:id="@+id/menu_home"
android:name="cn.douvril.easynews.ui.HomeFragment"
android:label="home"
tools:layout="@layout/fragment_home1" />
<fragment
android:id="@+id/menu_categories"
android:name="cn.douvril.easynews.ui.CategoryFragment"
android:label="category"
tools:layout="@layout/fragment_category" />
</navigation>
每一个item和fragment都是一一对应的关系, 而且其id必须相同.
否则, navControl将无法正确匹配, 而BottomNavigationView的切换也会出现异常情况.
笔者这里的异常时无法切换底部的tab.
2. app:defaultNavHost=“true”
可以将第一个fragment设置为导航首页, 而且当页面处于其它的fragment时, 按下back键, 首先将回退到第一个fragment, 而非直接退出.