Safe Args

Cara yang direkomendasikan untuk bernavigasi antar-tujuan adalah dengan menggunakan plugin Safe Args Gradle. Plugin ini menghasilkan class builder dan objek yang mengaktifkan navigasi dengan keamanan jenis antar-tujuan. Gunakan Safe Args untuk menavigasi dan meneruskan data antar-tujuan.

Mengaktifkan Safe Args

如需将 Safe Args 添加到您的项目,请在顶层 build.gradle 文件中包含以下 classpath:

Groovy

buildscript {
    repositories {
        google()
    }
    dependencies {
        def nav_version = "2.10.2"
        classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
    }
}

Kotlin

buildscript {
    repositories {
        google()
    }
    dependencies {
        val nav_version = "2.10.2"
        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。

Kode yang dihasilkan

Setelah mengaktifkan Safe Args, kode yang dihasilkan akan berisi class dan metode untuk setiap tindakan yang Anda tentukan serta class yang terkait dengan setiap tujuan pengiriman dan penerimaan.

Safe Args menghasilkan class untuk setiap tujuan tempat asal tindakan. Nama class yang dihasilkan menambahkan "Directions" ke nama class tujuan awal. Misalnya, jika tujuan awal diberi nama SpecifyAmountFragment, class yang dihasilkan akan diberi nama SpecifyAmountFragmentDirections.

Class yang dihasilkan berisi metode statis untuk setiap tindakan yang ditentukan pada tujuan awal. Metode ini menggunakan setiap parameter tindakan yang ditentukan sebagai argumen dan menampilkan objek NavDirections yang dapat langsung Anda teruskan ke navigate().

Contoh Safe Args

Misalnya, perhatikan grafik navigasi dengan satu tindakan yang menghubungkan dua tujuan, yaitu SpecifyAmountFragment dan ConfirmationFragment. ConfirmationFragment menggunakan satu parameter float yang Anda sediakan sebagai bagian dari tindakan.

Safe Args menghasilkan class SpecifyAmountFragmentDirections dengan satu metode, actionSpecifyAmountFragmentToConfirmationFragment(), dan class dalam yang disebut ActionSpecifyAmountFragmentToConfirmationFragment. Class dalam diperoleh dari NavDirections dan menyimpan ID tindakan dan parameter float yang terkait. Objek NavDirections yang ditampilkan ini kemudian dapat diteruskan langsung ke navigate(), seperti yang ditunjukkan dalam contoh berikut:

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);
}

Untuk informasi selengkapnya tentang meneruskan data antartujuan dengan Safe Args, lihat Menggunakan Safe Args untuk meneruskan data dengan keamanan jenis.

Memastikan keamanan jenis menggunakan Safe Args

Bernavigasi antar-tujuan menggunakan plugin Safe Args Gradle. Plugin ini menghasilkan class builder dan objek sederhana yang mengaktifkan navigasi dengan keamanan jenis dan argumen yang melewati antartujuan.

如需将 Safe Args 添加到您的项目,请在顶层 build.gradle 文件中包含以下 classpath:

Groovy

buildscript {
    repositories {
        google()
    }
    dependencies {
        def nav_version = "2.10.2"
        classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
    }
}

Kotlin

buildscript {
    repositories {
        google()
    }
    dependencies {
        val nav_version = "2.10.2"
        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。

Setelah Anda mengaktifkan Safe Args, plugin tersebut akan menghasilkan kode yang berisi class dan metode untuk setiap tindakan yang telah Anda tentukan. Untuk setiap tindakan, Safe Args juga menghasilkan class untuk setiap tujuan asal, yang merupakan tujuan di mana tindakan tersebut berasal. Nama class yang dihasilkan adalah kombinasi nama class tujuan asal dan kata "Directions". Misalnya, jika tujuan diberi nama SpecifyAmountFragment, class yang dihasilkan akan diberi nama SpecifyAmountFragmentDirections. Class yang dihasilkan berisi metode statis untuk setiap tindakan yang ditentukan pada tujuan awal. Metode ini menggunakan parameter tindakan yang ditentukan sebagai argumen dan menampilkan sebuah objek NavDirections yang dapat Anda teruskan ke navigate().

Sebagai contoh, asumsikan kita memiliki grafik navigasi dengan satu tindakan yang menghubungkan tujuan asal, SpecifyAmountFragment, ke tujuan penerima, ConfirmationFragment.

Safe Args akan menghasilkan class SpecifyAmountFragmentDirections dengan satu metode, actionSpecifyAmountFragmentToConfirmationFragment() yang menampilkan objek NavDirections. Objek NavDirections yang ditampilkan ini nantinya dapat langsung diteruskan ke navigate(), seperti yang ditunjukkan dalam contoh berikut:

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);
}

Untuk informasi selengkapnya tentang meneruskan data antar-tujuan dengan Safe Args, lihat Menggunakan Safe Args untuk meneruskan data dengan keamanan jenis di Meneruskan data antar tujuan.