您可以使用導覽動作,在片段之間建立連結。觸發導覽動作時,使用者會從一個目的地前往另一個目的地。本指南將介紹何謂動作,並說明如何建立及使用動作。
總覽
每個動作都具有專屬 ID,可包含目的地等額外屬性。目的地會定義使用者觸發動作時,應用程式會將他們導向哪個畫面。動作也可以使用引數,在不同目的地之間傳遞資料。
- Safe Args:透過動作,您可以將資源 ID 替換為 Safe Args 產生的作業,增添編譯時的安全性。
- 動畫:您也可以為目的地之間的轉場加上動畫效果。詳情請參閱這篇文章。
範例
請使用 <action>
標記,在導覽圖 XML 檔案中定義動作。下列程式碼片段會實作動作,代表從 FragmentA
轉換到 FragmentB
。
<fragment android:id="@+id/fragmentA" android:name="com.example.FragmentA"> <action android:id="@+id/action_fragmentA_to_fragmentB" app:destination="@id/fragmentB" /> </fragment>
使用動作進行導覽
如要使用此動作進行導覽,請呼叫 NavController.navigate()
,並將動作的 id
傳遞至此函式:
navController.navigate(R.id.action_fragmentA_to_fragmentB)
全域動作
您可以使用全域動作,從任何位置前往目的地。
如果應用程式中的目的地可透過多個路徑存取,請定義前往該目的地的相對應全域動作。
請參考以下範例。results_winner
和 game_over
目的地都需要彈出至主目的地。action_pop_out_of_game
動作提供執行此操作的功能,action_pop_out_of_game
則是任何特定片段外的全域動作。這表示您可以在 in_game_nav_graph
內的任何位置參照和呼叫該動作。
<?xml version="1.0" encoding="utf-8"?> <navigation xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/in_game_nav_graph" app:startDestination="@id/in_game"> <!-- Action back to destination which launched into this in_game_nav_graph --> <action android:id="@+id/action_pop_out_of_game" app:popUpTo="@id/in_game_nav_graph" app:popUpToInclusive="true" /> <fragment android:id="@+id/in_game" android:name="com.example.android.gamemodule.InGame" android:label="Game"> <action android:id="@+id/action_in_game_to_resultsWinner" app:destination="@id/results_winner" /> <action android:id="@+id/action_in_game_to_gameOver" app:destination="@id/game_over" /> </fragment> <fragment android:id="@+id/results_winner" android:name="com.example.android.gamemodule.ResultsWinner" /> <fragment android:id="@+id/game_over" android:name="com.example.android.gamemodule.GameOver" android:label="fragment_game_over" tools:layout="@layout/fragment_game_over" /> </navigation>