Jetpack (四) 之 Navigation

原理:Jetpack Navigation 原理浅析

Navigation 的 基本使用

  1. gradle 库导入 根据Java 或者 Kotlin 需求导入
dependencies {
  def nav_version = "2.3.2"

  // Java language implementation
  implementation "androidx.navigation:navigation-fragment:$nav_version"
  implementation "androidx.navigation:navigation-ui:$nav_version"

  // Kotlin
  implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
  implementation "androidx.navigation:navigation-ui-ktx:$nav_version"

  // Feature module Support
  implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version"

  // Testing Navigation
  androidTestImplementation "androidx.navigation:navigation-testing:$nav_version"

  // Jetpack Compose Integration
  implementation "androidx.navigation:navigation-compose:1.0.0-alpha05"
}
  1. 创建 navigation graph

可以用AS界面,也可以手动创建

res/navigation/nav_graph.xml



    
        
    
    
        
    
    
        
    

重点看下这几个属性

navigation ---->android:id 和 app:startDestination 声明
fragment ------> id,name,label
fragment 子标签 action----> id,app:destination

  1. 添加 NavHost 到 activity

主要的NavigationActivity的activity_navigation.xml



    

指定navigation文件
app:navGraph="@navigation/nav_graph"
主容器fragment
android:name="androidx.navigation.fragment.NavHostFragmen"
app:defaultNavHost="true" 拦截系统back键

官网API

新版的官网可以用 FragmentContainerView,查看源码也是instantiate一个实例fragment,大同小异

  1. 添加 destinations 到 navigation graph

  2. 导航到目标

底部导航切换的做法

BottomNavigationView bottomNavigationView = findViewById(R.id.fragment1_2)...;

NavController 创建两种方式

1. NavController controller=Navigation.findNavController(this,R.id.fragment_nav_host);

2.  NavHostFragment navHostFragment = (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.fragment_nav_host);
 NavController controller = navHostFragment.getNavController();

controller 绑定到底部导航View(MaterialDesign中)
NavigationUI.setupWithNavController(bottomNavigationView,controller);

回退到上一步的api

Navigation.findNavController(view).navigateUp();
或者指定目标
Navigation.findNavController(view).navigate(R.id.action_page2);

Jetpack(一)Lifecycle和LiveData
JetPacks之Lifecycles原理
JetPack之 LifeCycle LiveData

Jetpack(二)之DataBinding

Jetpack(三) 之 Room 与 ViewModel
Jetpack 之 ViewModel 原理

Jetpack (四) 之 Navigation
Jetpack Navigation 原理浅析

JetPack (五)之 Paging 分页库

Jetpack(六) 之 WorkManager
Jetpack WorkManager 原理

你可能感兴趣的:(Jetpack (四) 之 Navigation)