Safe Args

วิธีที่แนะนำในการไปยังปลายทางต่างๆ คือการใช้ Safe Args ปลั๊กอิน Gradle ปลั๊กอินนี้จะสร้างคลาสออบเจ็กต์และเครื่องมือสร้างที่ช่วยให้ การนำทางอย่างปลอดภัยระหว่างปลายทางต่างๆ ใช้ Args ที่ปลอดภัยสำหรับ การนำทางและการส่งข้อมูลระหว่างปลายทาง

เปิดใช้ Safe Args

วิธีเพิ่ม อาร์กิวเมนต์ที่ปลอดภัย ลงในโปรเจ็กต์ของคุณ ให้ใส่ classpath ต่อไปนี้ในไฟล์ build.gradle ระดับบนสุด

ดึงดูด

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

นอกจากนี้ คุณต้องใช้ปลั๊กอิน 1 ใน 2 รายการที่มีอยู่ด้วย

หากต้องการสร้างโค้ดภาษา Java ที่เหมาะสำหรับโมดูล Java และ Kotlin แบบผสม ให้เพิ่ม บรรทัดนี้ไปยังไฟล์ build.gradle ของแอปหรือโมดูลของคุณ

ดึงดูด

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

plugins {
    id("androidx.navigation.safeargs")
}

หากต้องการสร้างโค้ด Kotlin ที่เหมาะสำหรับโมดูล Kotlin เท่านั้น ให้เพิ่มรายการต่อไปนี้

ดึงดูด

plugins {
  id 'androidx.navigation.safeargs.kotlin'
}

Kotlin

plugins {
    id("androidx.navigation.safeargs.kotlin")
}

คุณต้องมี android.useAndroidX=true ใน gradle.properties ไฟล์ตาม การย้ายข้อมูลไปยัง AndroidX

โค้ดที่สร้างขึ้น

หลังจากเปิดใช้ Safe Args แล้ว โค้ดที่สร้างขึ้นจะมีคลาสและเมธอดสำหรับ การดำเนินการแต่ละรายการที่คุณกำหนด รวมถึงคลาสที่สอดคล้องกับการส่งแต่ละครั้ง และปลายทางที่จะรับ

ทั้งนี้ Safe Args จะสร้างคลาสสำหรับปลายทางแต่ละรายการที่เกิดการกระทำ ชื่อคลาสที่สร้างขึ้นจะเพิ่ม "เส้นทาง" ไปยังคลาสปลายทางต้นทาง ชื่อ เช่น ถ้าปลายทางต้นทางมีชื่อ SpecifyAmountFragment ชื่อคลาสที่สร้างขึ้น SpecifyAmountFragmentDirections

คลาสที่สร้างขึ้นมีวิธีแบบคงที่สำหรับการดำเนินการแต่ละข้อที่กำหนดไว้ใน ปลายทางต้นทาง เมธอดนี้จะใช้พารามิเตอร์การดำเนินการที่กำหนดไว้เป็น อาร์กิวเมนต์และแสดงผลออบเจ็กต์ NavDirections ที่คุณส่งได้โดยตรง เป็น navigate()

ตัวอย่าง Args ที่ปลอดภัย

ตัวอย่างเช่น ลองพิจารณากราฟการนำทางที่มีการกระทำเดียวที่เชื่อมโยงถึงสอง ปลายทาง SpecifyAmountFragment และ ConfirmationFragment ConfirmationFragment จะใช้พารามิเตอร์ float รายการเดียวที่คุณระบุ ของการดำเนินการ

ทั้งนี้ Safe Args จะสร้างคลาส SpecifyAmountFragmentDirections ที่มีรายการเดียว เมธอด, actionSpecifyAmountFragmentToConfirmationFragment() และอินเตอร์เน็ต ชื่อ ActionSpecifyAmountFragmentToConfirmationFragment โครงสร้างภายใน ได้มาจาก NavDirections และจัดเก็บรหัสการดำเนินการที่เชื่อมโยงและ พารามิเตอร์ 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 ปลั๊กอินนี้จะสร้างคลาสออบเจ็กต์และเครื่องมือสร้างที่ เปิดใช้การนำทางที่ปลอดภัยตามประเภทและการส่งอาร์กิวเมนต์ระหว่างปลายทาง

วิธีเพิ่ม อาร์กิวเมนต์ที่ปลอดภัย ลงในโปรเจ็กต์ของคุณ ให้ใส่ classpath ต่อไปนี้ในไฟล์ build.gradle ระดับบนสุด

ดึงดูด

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

นอกจากนี้ คุณต้องใช้ปลั๊กอิน 1 ใน 2 รายการที่มีอยู่ด้วย

หากต้องการสร้างโค้ดภาษา Java ที่เหมาะสำหรับโมดูล Java และ Kotlin แบบผสม ให้เพิ่ม บรรทัดนี้ไปยังไฟล์ build.gradle ของแอปหรือโมดูลของคุณ

ดึงดูด

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

plugins {
    id("androidx.navigation.safeargs")
}

หากต้องการสร้างโค้ด Kotlin ที่เหมาะสำหรับโมดูล Kotlin เท่านั้น ให้เพิ่มรายการต่อไปนี้

ดึงดูด

plugins {
  id 'androidx.navigation.safeargs.kotlin'
}

Kotlin

plugins {
    id("androidx.navigation.safeargs.kotlin")
}

คุณต้องมี android.useAndroidX=true ใน gradle.properties ไฟล์ตาม การย้ายข้อมูลไปยัง AndroidX

หลังจากที่คุณเปิดใช้ Safe Args แล้ว ปลั๊กอินจะสร้างโค้ดที่มีคลาสและ สำหรับแต่ละการดำเนินการที่คุณกำหนดไว้ สำหรับการดำเนินการแต่ละรายการ Safe Args ยัง สร้างคลาสสำหรับปลายทางต้นทางแต่ละรายการ ซึ่งเป็นปลายทาง จุดเริ่มต้นของการทำงาน ชื่อคลาสที่สร้างขึ้นเป็นชุดค่าผสมของ ชื่อคลาสของปลายทางต้นทางและคำว่า "เส้นทาง" ตัวอย่างเช่น หากปลายทางชื่อ SpecifyAmountFragment คลาสที่สร้างขึ้นจะเป็น ชื่อ SpecifyAmountFragmentDirections คลาสที่สร้างขึ้นมี สำหรับแต่ละการดำเนินการที่กำหนดไว้ในปลายทางต้นทาง วิธีนี้ใช้เวลา พารามิเตอร์การดำเนินการที่กำหนดเป็นอาร์กิวเมนต์และแสดงผลออบเจ็กต์ NavDirections ที่คุณสามารถส่งไปยัง navigate()

ตัวอย่างเช่น สมมติว่าเรามีกราฟการนำทางที่มีการกระทำเดียวที่ เชื่อมต่อปลายทางต้นทาง SpecifyAmountFragment กับปลายทาง ปลายทาง ConfirmationFragment

ทั้งนี้ Safe Args จะสร้างคลาส SpecifyAmountFragmentDirections ที่มีรายการเดียว actionSpecifyAmountFragmentToConfirmationFragment() ซึ่งแสดงผล ออบเจ็กต์ 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 เพื่อส่งข้อมูลที่มีประเภทความปลอดภัยในส่งข้อมูลระหว่าง ปลายทาง