Safe Args

Bạn nên di chuyển giữa các đích đến bằng trình bổ trợ Safe Args Gradle. Trình bổ trợ này tạo các lớp cho đối tượng và trình tạo để điều hướng theo hình thức an toàn về kiểu giữa các đích đến. Sử dụng Safe Args để điều hướng và truyền dữ liệu giữa các đích đến.

Bật Safe Args

Để thêm Safe Args vào dự án, hãy đưa classpath sau vào tệp build.gradle cấp cao nhất của bạn:

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

Bạn cũng phải áp dụng 1 trong 2 trình bổ trợ có sẵn.

Để tạo mã ngôn ngữ Java phù hợp với mô-đun Java và Kotlin, hãy thêm dòng này vào tệp build.gradle của ứng dụng hoặc mô-đun:

Groovy

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

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

Ngoài ra, để tạo mã Kotlin phù hợp với các mô-đun chỉ Kotlin, hãy thêm:

Groovy

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

Kotlin

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

Bạn phải có android.useAndroidX=true trong tệp gradle.properties theo hướng dẫn Di chuyển sang AndroidX.

Mã đã tạo

Sau khi bật trình bổ trợ Safe Args, mã do bạn tạo sẽ chứa các lớp và phương thức cho từng thao tác mà bạn xác định, cũng như các lớp tương ứng với từng đích đến của hoạt động gửi và nhận.

Safe Args tạo một lớp cho mỗi đích ban đầu của một thao tác. Tên lớp được tạo sẽ thêm "Hướng" vào tên lớp đích ban đầu. Ví dụ: nếu đích ban đầu có tên là SpecifyAmountFragment, thì lớp được tạo sẽ có tên là SpecifyAmountFragmentDirections.

Lớp được tạo chứa một phương thức tĩnh cho mỗi hành động đã quy định trong đích đến ban đầu. Phương thức này lấy các thông số tác vụ đã quy định làm đối số và trả về một đối tượng NavDirections mà bạn có thể truyền trực tiếp đến navigate().

Ví dụ về Safe Args

Ví dụ: hãy xem xét biểu đồ điều hướng với một thao tác kết nối 2 đích đến, đó là SpecifyAmountFragmentConfirmationFragment. ConfirmationFragment lấy một thông số float duy nhất mà bạn cung cấp trong tác vụ.

Safe Args tạo một lớp SpecifyAmountFragmentDirections bằng một phương thức duy nhất là actionSpecifyAmountFragmentToConfirmationFragment() và một lớp bên trong có tên là ActionSpecifyAmountFragmentToConfirmationFragment. Lớp bên trong được lấy từ NavDirections và lưu trữ mã thao tác cũng như tham số float được liên kết. Sau đó, đối tượng NavDirections được trả về có thể được chuyển trực tiếp đến navigate(), như trong ví dụ sau:

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

Để biết thêm thông tin về việc truyền dữ liệu giữa các đích đến bằng Safe Args, hãy xem phần Sử dụng Safe Args để truyền dữ liệu với an toàn về kiểu.

Đảm bảo an toàn về kiểu bằng Safe Args

Điều hướng giữa các đích đến bằng trình bổ trợ Safe Args Gradle. Trình bổ trợ này tạo các lớp đơn giản cho đối tượng và trình tạo để truyền đối số và điều hướng an toàn về kiểu giữa các đích đến.

Để thêm Safe Args vào dự án, hãy đưa classpath sau vào tệp build.gradle cấp cao nhất của bạn:

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

Bạn cũng phải áp dụng 1 trong 2 trình bổ trợ có sẵn.

Để tạo mã ngôn ngữ Java phù hợp với mô-đun Java và Kotlin, hãy thêm dòng này vào tệp build.gradle của ứng dụng hoặc mô-đun:

Groovy

plugins {
  id 'androidx.navigation.safeargs'
}

Kotlin

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

Ngoài ra, để tạo mã Kotlin phù hợp với các mô-đun chỉ Kotlin, hãy thêm:

Groovy

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

Kotlin

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

Bạn phải có android.useAndroidX=true trong tệp gradle.properties theo hướng dẫn Di chuyển sang AndroidX.

Sau khi bạn bật Safe Args, trình bổ trợ sẽ tạo mã chứa các lớp và phương thức cho mỗi hành động bạn đã quy định. Đối với mỗi hành động, Safe Args cũng tạo một lớp cho mỗi đích đến ban đầu, là đích đến mà hành động xuất phát từ đó. Tên lớp được tạo là sự kết hợp giữa tên lớp đích đến ban đầu và từ "Directions" (Đường đi). Ví dụ: nếu đích đến có tên là SpecifyAmountFragment, lớp được tạo sẽ có tên là SpecifyAmountFragmentDirections. Lớp được tạo chứa một phương thức tĩnh cho mỗi hành động đã quy định trong đích đến ban đầu. Phương thức này lấy mọi tham số hành động đã quy định làm đối số và trả về một đối tượng NavDirections mà bạn có thể truyền đến navigate().

Ví dụ: giả sử chúng ta có biểu đồ điều hướng với một hành động kết nối đích xuất phát là SpecifyAmountFragment với đích nhận là ConfirmationFragment.

Safe Args tạo một lớp SpecifyAmountFragmentDirections bằng một phương thức duy nhất là actionSpecifyAmountFragmentToConfirmationFragment(), phương thức này trả về đối tượng NavDirections. Sau đó, đối tượng NavDirections được trả về này có thể được truyền trực tiếp đến navigate(), như trong ví dụ sau:

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

Để biết thêm thông tin về việc truyền dữ liệu giữa các đích đến bằng Safe Args, hãy xem phần Dùng Safe Args để truyền dữ liệu đảm bảo an toàn về kiểu trong phần Truyền dữ liệu giữa các đích đến.