Android Navigation 架構組件入門教程
版權聲明:本文為博主原創文章,未經博主允許不得轉載。
前言
Navigation組件是AndroidStudio3.2版本更新帶來的新組件,其特點是在一個Activity中使用多個Fragment處理平滑用戶操作,且可以統一進場,退場,彈出,隱藏動畫,可視化處理Action,支持深層鏈接(不在同一個Activity時可以彈出跳轉,底層是BroadcastReceiver),支持以少量代碼連接底部導航或者連接ActionBar菜單或者連接Drawlayout的MenuItem,且導航時提供了類型安全(SafeArgs)。好處說了那么多,下面咱們來看看具體如何使用吧!
教程下載
你需要知道
關於Navigation你需要知道如下三個組件
Navigation graph
這是Navigation的導航圖,位於res/navigation/
目錄下的xml文件,
其有兩個模式,Design
(可視化設計模式)和Text
(文字模式),在Design
可視化環境下可以對整個Navigation
做新建等操作,在Text
模式下可進行代碼聲明,如下所示:
<fragment
android:id="@+id/home_dest"
android:name="com.example.android.codelabs.navigation.HomeFragment"
android:label="@string/home"
tools:layout="@layout/home_fragment">
<action
android:id="@+id/next_action"
app:destination="@+id/flow_step_one_dest"
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>
NavHostFragment
每個Navigation
圖都有一個起始的Fragment,這個Fragment將作為棧底(壓棧,類似Activity的啟動棧),其在布局文件中如下聲明:
<fragment
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:id="@+id/my_nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
app:navGraph="@navigation/nav_graph"
app:defaultNavHost="true"
/>
- 這里面大家重點關注
android:name
和app:defaultNavHost="true"
是聲明啟動的Fragment為NavHostFragment
- 下面的
app:navGraph
是將此fragment與Navigation graph
做關聯
NavController
NavController是一個跟蹤Navigation graph
當前位置的對象,主要協調NavHostFragment
顯示對應的Fragment,可通過NavController控制跳轉邏輯,安全傳參(SafeArgs后面講解)
SafeArgs
使用SafeArgs
需要導入Gradle插件(詳情看注意事項第4點),在傳值類型會自動生成對應類型的class,所以官方推介使用SafeArgs進行傳參
實踐過程
- 使用AndroidStudio 3.2以上版本
- 在AndroidStudio 中導入教程下載的實驗項目,此過程等待時間長短依據你當前的網絡環境
- 打開
app\src\main\res\navigation\nav_graph
文件(此文件就是上面提到的Navigation graph) - 切換頁面內,下面的編輯模式到
Design
模式,在里面找到一個綠色的+號New Destination
,在彈出的窗口內選擇SettingFragment
,恭喜你目前已經掌握添加一個Fragment到Navigation Edit - 接下來咱們切換到
MainFragment
,在onCreateView
中加入NavController navController = NavHostFragment.findNavController(MainFragment.this); navController.navigate(R.id.twoFragment);
,這段代碼意味着咱們從前面認識到的NavHostFragment中找到NavController,后面通過得到的NavController導航到ID叫R.id.twoFragment
的目標 - 接下來咱們切換到
TwoFragment
,在onCreateView
中加入NavController navController = NavHostFragment.findNavController(TwoFragment.this); navController.navigate(R.id.mainFragment);
,這段代碼意味着咱們從前面認識到的NavHostFragment中找到NavController,后面通過得到的NavController導航到ID叫R.id.mainFragment
的目標 - 運行項目
- 至此你已經初步掌握了Navigation的入門用法!
注意事項
- 運行環境必須是Android Studio3.2以上
- 最低運行在API14設備以上