版權聲明:本文爲博主原創文章,未經博主容許不得轉載。html
轉載請代表出處:https://www.cnblogs.com/cavalier-/p/10429936.htmlandroid
Navigation組件是AndroidStudio3.2版本更新帶來的新組件,其特色是在一個Activity中使用多個Fragment處理平滑用戶操做,且能夠統一進場,退場,彈出,隱藏動畫,可視化處理Action,支持深層連接(不在同一個Activity時能夠彈出跳轉,底層是BroadcastReceiver),支持以少許代碼鏈接底部導航或者鏈接ActionBar菜單或者鏈接Drawlayout的MenuItem,且導航時提供了類型安全(SafeArgs)。好處說了那麼多,下面我們來看看具體如何使用吧!git
教程githubgithub
關於Navigation你須要知道以下三個組件設計模式
這是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>
每一個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是一個跟蹤Navigation graph
當前位置的對象,主要協調NavHostFragment
顯示對應的Fragment,可經過NavController控制跳轉邏輯,安全傳參(SafeArgs後面講解)架構
使用SafeArgs
須要導入Gradle插件(詳情看注意事項第4點),在傳值類型會自動生成對應類型的class,因此官方推介使用SafeArgs進行傳參app
app\src\main\res\navigation\nav_graph
文件(此文件就是上面提到的Navigation graph)Design
模式,在裏面找到一個綠色的+號New Destination
,在彈出的窗口內選擇SettingFragment
,恭喜你目前已經掌握添加一個Fragment到Navigation EditMainFragment
,在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文檔ide