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à SpecifyAmountFragment
và ConfirmationFragment
. 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.