Android新导航组件NavController的坑

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, 而非直接退出.

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值