navigation的配置以及绑定

1,startDestination是APP默认启动的页面,这里面必须要指定,否则会报错crash。

navigation_main.xml

<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/navigation_main"
            app:startDestination="@+id/homeFragment"
            tools:ignore="UnusedNavigation">
  
 <fragment android:id="@+id/homeFragment"
              android:name="com.hankkin.jetpack_note.ui.home.HomeFragment"
              android:label="@string/menu_home">
        <action android:id="@+id/action_navigationFragment_to_webFragment"
                app:destination="@id/webFragment"
                app:enterAnim="@anim/slide_in_right"
                app:exitAnim="@anim/slide_out_left"
                app:popEnterAnim="@anim/slide_in_left"
                app:popExitAnim="@anim/slide_out_right"/>
    </fragment>

    <fragment android:id="@+id/codeFragment"
              android:name="com.hankkin.jetpack_note.ui.CodeFragment"
              android:label="@string/menu_code"/>

2,下面是菜单的配置,其中item的id要和navigation_main.xml中fragment的id相同,这样配置后就可以正确跳转

<item
                android:id="@+id/homeFragment"
                android:icon="@drawable/ic_menu_home"
                android:title="@string/menu_home"/>
        <item
                android:id="@+id/codeFragment"
                android:icon="@drawable/ic_menu_code"
                android:title="@string/menu_code"/>

3,        

        navController = Navigation.findNavController(this, R.id.fragment_home)
        appBarConfiguration = AppBarConfiguration(setOf(R.id.homeFragment, R.id.codeFragment), drawerLayout)
        // Set up ActionBar
        setSupportActionBar(mDataBinding.toolbar)
        setupActionBarWithNavController(navController, appBarConfiguration)
        // Set up navigation menu
        mDataBinding.navView.setupWithNavController(navController)

  • 我们通过findNavController传入之前定义好的装载fragment的容器id(也就是之前定义的NavHostFragment)找到了Navigation对应的navController;
  • 通过配置一个AppBarConfiguration,AppBarConfiguration 里传入了一个id的set集合和drawerlayout,id的集合就是我们在**navigation_main.xml **定义的fragment id
  • 最后通过设置setupActionBarWithNavController、setupWithNavController进行关联绑定


 

猜你喜欢

转载自blog.csdn.net/whb008/article/details/113971432