新選擇 Android Navigation Component
除了使用傳統的 FragmentManager 來管理 Fragment 之外,官方提供另一套新的管理做選擇,那就是 Android Navigation Component ,讓我們來瞧瞧~
使用 FragmentManager 做管理最常見的問題就是
- 不容易知道完整 App 流程
- 自行控制 Back Stack
- UI 狀態管理(Options Menu, Up Button 是否顯示、Bottom Navigation 是否在正確的位置 Highlights 等…)
這些問題 Android Navigation Component 通通幫你處理~
三個主要元件
Navigation graph
新的 XML Resource,中心化管理 App 中所有導航相關資訊,另外介紹 Destination, Action 兩個名詞,Destination (目的地) 也就是 Fragment 或 Activity,Action 是 Destination 前往另一個 Destination 的路徑
NavHostFragment
Layout XML View,用來顯示 Navigation graph 中的 Destination 的容器
範例:在 XML 中輸入 <fragment>,name 指定為 NavHostFragment 即可
NavController
Kotlin/Java object,管理、追蹤 Navigation graph 的 Destination 正確顯示在 NavHostFragment 裡
實戰演練
Google Codelabs 有提供完整的練習教學 (Kotlin),大家一定要去看~
下面分享我學習到的幾個重點
轉場
指定 Destination 透過 NavController 來轉場或者使用靜態方法轉場
單純轉場感覺乏味嗎?加點動畫~
當然我們也能透過 Action 進行轉場,先在 Navigation graph 裡先設定好 Action
一樣指定 Action 透過 NavController 來轉場或者使用靜態方法轉場
Fragment 傳參數
如果我們想傳參數給 Fragment 怎麼辦? 你可以使用傳統的 Bundle 傳參數或使用 Navigation Component 提供 SafeArgs plugin 來傳參數
使用 SafeArgs Plugin 必須先設定 Gradle,在 Project 的 build.gradle 的 dependencies 裡加入
classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$navigationVersion"
再來在 App 的 build.gradle 加入
apply plugin: 'androidx.navigation.safeargs.kotlin'
使用 SafeArgs 也是一樣要先去 Navigation graph 設定
build project 後 gradle 會自動產生 Class
這時就能在目的地的 Fragment 中使用 Gradle 產生的 Class 取參數
從別的 Destination 傳參數並轉場另一個 Destination
結語
Navigation Component 的好處不只這些,快去 Google Codelabs 練習,你會發現更多厲害的功能~
如有任何問題或批評指教,歡迎您留言告訴我!
請各位給我點掌聲!謝謝各位的觀賞.