Safe Args

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

เปิดใช้ Safe Args

หากต้องการเพิ่ม Safe Args ลงในโปรเจ็กต์ ให้ใส่ classpath ต่อไปนี้ในไฟล์ build.gradle ระดับบนสุด

Groovy

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

Kotlin

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

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

หากต้องการสร้างโค้ดภาษา Java ที่เหมาะสำหรับโมดูล Java หรือโมดูล Java และ Kotlin แบบผสม ให้เพิ่มบรรทัดต่อไปนี้ลงในไฟล์ 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")
}

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

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

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

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

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

ตัวอย่าง Safe Args

ตัวอย่างเช่น ลองพิจารณากราฟการนำทางที่มีการดำเนินการเดียวที่เชื่อมต่อปลายทาง 2 แห่ง ได้แก่ 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

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

หากต้องการเพิ่ม Safe Args ลงในโปรเจ็กต์ ให้ใส่ classpath ต่อไปนี้ในไฟล์ build.gradle ระดับบนสุด

Groovy

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

Kotlin

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

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

หากต้องการสร้างโค้ดภาษา Java ที่เหมาะสำหรับโมดูล Java หรือโมดูล Java และ Kotlin แบบผสม ให้เพิ่มบรรทัดต่อไปนี้ลงในไฟล์ 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")
}

คุณต้องมี 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 เพื่อส่งข้อมูลที่มีความปลอดภัยในการกำหนดประเภทในส่งข้อมูลระหว่างปลายทาง