建議您使用 Safe Args Gradle 外掛程式在目的地之間導覽。此外掛程式會產生物件和建構工具類別,方便在不同目的地之間進行符合類型安全的導覽。請使用 Safe Args 進行導覽及在目的地之間傳遞資料。
啟用 Safe Args
如要在專案中新增 Safe Args,請在頂層 build.gradle
檔案中納入下列 classpath
:
Groovy
buildscript { repositories { google() } dependencies { def nav_version = "2.8.0" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
Kotlin
buildscript { repositories { google() } dependencies { val nav_version = "2.8.0" classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version") } }
您也必須從兩個可用的外掛程式之中選擇一項套用。
如要產生適合 Java 或混用 Java 及 Kotlin 模組的 Java 語言程式碼,請將以下這一行新增至應用程式或模組的 build.gradle
檔案:
Groovy
plugins { id 'androidx.navigation.safeargs' }
Kotlin
plugins { id("androidx.navigation.safeargs") }
或者,如要產生適合 Kotlin 模組的 Kotlin 程式碼,請加入:
Groovy
plugins { id 'androidx.navigation.safeargs.kotlin' }
Kotlin
plugins { id("androidx.navigation.safeargs.kotlin") }
根據遷移至 AndroidX 一文,gradle.properties
檔案中必須含有 android.useAndroidX=true
。
產生的程式碼
啟用 Safe Args 之後,產生的程式碼會包含您定義的各項操作類別和方法,以及對應至各個傳送和接收目的地的類別。
Safe Args 會為每個動作產生的目的地產生類別。產生的類別名稱會在原始目的地的類別名稱中加入「Directions」(路線)。舉例來說,如果原始目的地的名稱為 SpecifyAmountFragment
,則產生的類別名稱為 SpecifyAmountFragmentDirections
。
產生的類別會為原始目的地中定義的每種動作提供靜態方法。此方法會將任何已定義的動作參數當做引數,並傳回 NavDirections
物件,您就能將物件直接傳遞到 navigate()
。
Safe Args 範例
舉例來說,假設有一個導覽圖包含可連接兩個目的地 (SpecifyAmountFragment
和 ConfirmationFragment
) 的單一操作,其中 ConfirmationFragment
採用您在操作中提供的單一 float
參數。
Safe Args 會產生具有單一方法 actionSpecifyAmountFragmentToConfirmationFragment()
的 SpecifyAmountFragmentDirections
類別,以及名為 ActionSpecifyAmountFragmentToConfirmationFragment
的內部類別。該內部類別來自於 NavDirections
,其中儲存了相關的操作 ID 及 float
參數。接著,系統會將傳回的 NavDirections
物件直接傳遞至 navigate()
,如以下範例所示:
Kotlin
override fun onClick(v: View) {
val amount: Float = ...
val action =
SpecifyAmountFragmentDirections
.actionSpecifyAmountFragmentToConfirmationFragment(amount)
v.findNavController().navigate(action)
}
Java
@Override
public void onClick(View view) {
float amount = ...;
action =
SpecifyAmountFragmentDirections
.actionSpecifyAmountFragmentToConfirmationFragment(amount);
Navigation.findNavController(view).navigate(action);
}
如要進一步瞭解如何利用 Safe Args 在目的地之間傳遞資料,請參閱「使用 Safe Args 傳遞類型安全的資料」。
使用 Safe Args 確保類型安全
請使用 Safe Args Gradle 外掛程式在目的地之間導覽。此外掛程式會產生簡單的物件和建構工具類別,方便在不同目的地之間進行符合類型安全的導覽和引數傳遞作業。
如要在專案中新增 Safe Args,請在頂層 build.gradle
檔案中納入下列 classpath
:
Groovy
buildscript { repositories { google() } dependencies { def nav_version = "2.8.0" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
Kotlin
buildscript { repositories { google() } dependencies { val nav_version = "2.8.0" classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version") } }
您也必須從兩個可用的外掛程式之中選擇一項套用。
如要產生適合 Java 或混用 Java 及 Kotlin 模組的 Java 語言程式碼,請將以下這一行新增至應用程式或模組的 build.gradle
檔案:
Groovy
plugins { id 'androidx.navigation.safeargs' }
Kotlin
plugins { id("androidx.navigation.safeargs") }
或者,如要產生適合 Kotlin 模組的 Kotlin 程式碼,請加入:
Groovy
plugins { id 'androidx.navigation.safeargs.kotlin' }
Kotlin
plugins { id("androidx.navigation.safeargs.kotlin") }
根據遷移至 AndroidX 一文,gradle.properties
檔案中必須含有 android.useAndroidX=true
。
啟用 Safe Args 之後,外掛程式會產生程式碼,其中包含您定義的每個動作的類別和方法。對於每個動作,Safe Args 也會為每個「原始目的地」(也就是該動作的來源目的地) 產生類別。產生的類別名稱是由原始目的地類別名稱和「Directions」一詞組合而成。舉例來說,如果到達網頁名稱為 SpecifyAmountFragment
,產生的類別就會命名為 SpecifyAmountFragmentDirections
。產生的類別會為原始目的地中定義的每種動作提供靜態方法。這個方法會將任何已定義的動作參數當做引數,並傳回 NavDirections
物件,供您傳遞至 navigate()
。
舉例來說,假設導覽圖中包含單一動作,可將原始目的地 (SpecifyAmountFragment
) 連結至接收目的地 (ConfirmationFragment
)。
Safe Args 產生含有單一方法 actionSpecifyAmountFragmentToConfirmationFragment()
的 SpecifyAmountFragmentDirections
類別,而此類別會傳回 NavDirections
物件。接著,您就可以直接將傳回的 NavDirections
物件傳遞至 navigate()
,如以下範例所示:
Kotlin
override fun onClick(view: View) { val action = SpecifyAmountFragmentDirections .actionSpecifyAmountFragmentToConfirmationFragment() view.findNavController().navigate(action) }
Java
@Override public void onClick(View view) { NavDirections action = SpecifyAmountFragmentDirections .actionSpecifyAmountFragmentToConfirmationFragment(); Navigation.findNavController(view).navigate(action); }
如要進一步瞭解如何利用 Safe Args 在目的地之間傳遞資料,請參閱「在目的地之間傳遞資料」一文中的「使用 Safe Args 傳遞類型安全的資料」。