Рекомендуемый способ навигации между целевыми объектами — использование плагина Safe Args для Gradle. Этот плагин генерирует классы объектов и построителей, обеспечивающие типобезопасную навигацию между целевыми объектами. Используйте Safe Args для навигации и передачи данных между целевыми объектами .
Включить безопасные аргументы
Чтобы добавить функцию Safe Args в ваш проект, укажите следующий classpath в файле build.gradle верхнего уровня:
Классный
buildscript { repositories { google() } dependencies { def nav_version = "2.9.8" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
Котлин
buildscript { repositories { google() } dependencies { val nav_version = "2.9.8" classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version") } }
Вам также необходимо установить один из двух доступных плагинов.
Чтобы сгенерировать код на языке Java, подходящий для модулей Java или смешанных модулей Java и Kotlin, добавьте следующую строку в файл build.gradle вашего приложения или модуля :
Классный
plugins { id 'androidx.navigation.safeargs' }
Котлин
plugins { id("androidx.navigation.safeargs") }
В качестве альтернативы, для генерации кода Kotlin, подходящего для модулей, работающих только с Kotlin, добавьте:
Классный
plugins { id 'androidx.navigation.safeargs.kotlin' }
Котлин
plugins { id("androidx.navigation.safeargs.kotlin") }
В файле gradle.properties необходимо добавить android.useAndroidX=true как описано в разделе "Переход на AndroidX" .
Сгенерированный код
После включения функции Safe Args сгенерированный код будет содержать классы и методы для каждого определенного вами действия, а также классы, соответствующие каждому пункту назначения для отправки и получения данных.
Функция Safe Args генерирует класс для каждого места назначения, откуда исходит действие. К имени сгенерированного класса добавляется "Directions". Например, если место назначения называется SpecifyAmountFragment , сгенерированный класс будет называться SpecifyAmountFragmentDirections .
Сгенерированный класс содержит статический метод для каждого действия, определенного в исходном пункте назначения. Этот метод принимает в качестве аргументов любые определенные параметры действия и возвращает объект NavDirections , который можно напрямую передать в navigate() .
Пример безопасных аргументов
Например, рассмотрим граф навигации с одним действием, соединяющим два пункта назначения: SpecifyAmountFragment и ConfirmationFragment . ConfirmationFragment принимает один параметр float , который вы указываете в рамках действия.
Safe Args генерирует класс SpecifyAmountFragmentDirections с единственным методом actionSpecifyAmountFragmentToConfirmationFragment() и внутренним классом ActionSpecifyAmountFragmentToConfirmationFragment . Внутренний класс является производным от NavDirections и хранит связанный идентификатор действия и параметр float . Возвращаемый объект NavDirections затем можно передать непосредственно в navigate() , как показано в следующем примере:
Котлин
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 Gradle. Этот плагин генерирует простые классы объектов и построителей, обеспечивающие типобезопасную навигацию и передачу аргументов между пунктами назначения.
Чтобы добавить функцию Safe Args в ваш проект, укажите следующий classpath в файле build.gradle верхнего уровня:
Классный
buildscript { repositories { google() } dependencies { def nav_version = "2.9.8" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
Котлин
buildscript { repositories { google() } dependencies { val nav_version = "2.9.8" classpath("androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version") } }
Вам также необходимо установить один из двух доступных плагинов.
Чтобы сгенерировать код на языке Java, подходящий для модулей Java или смешанных модулей Java и Kotlin, добавьте следующую строку в файл build.gradle вашего приложения или модуля :
Классный
plugins { id 'androidx.navigation.safeargs' }
Котлин
plugins { id("androidx.navigation.safeargs") }
В качестве альтернативы, для генерации кода Kotlin, подходящего для модулей, работающих только с Kotlin, добавьте:
Классный
plugins { id 'androidx.navigation.safeargs.kotlin' }
Котлин
plugins { id("androidx.navigation.safeargs.kotlin") }
В файле gradle.properties необходимо добавить android.useAndroidX=true как описано в разделе "Переход на AndroidX" .
После включения функции Safe Args плагин генерирует код, содержащий классы и методы для каждого определенного вами действия. Для каждого действия Safe Args также генерирует класс для каждого исходного пункта назначения , то есть пункта назначения, из которого начинается действие. Имя сгенерированного класса представляет собой комбинацию имени класса исходного пункта назначения и слова "Directions". Например, если пункт назначения называется SpecifyAmountFragment , сгенерированный класс будет называться SpecifyAmountFragmentDirections . Сгенерированный класс содержит статический метод для каждого действия, определенного в исходном пункте назначения. Этот метод принимает в качестве аргументов любые определенные параметры действия и возвращает объект NavDirections , который можно передать в navigate() .
В качестве примера предположим, что у нас есть граф навигации с одним действием, которое связывает исходный пункт назначения, SpecifyAmountFragment , с принимающим пунктом назначения, ConfirmationFragment .
Класс Safe Args генерирует класс SpecifyAmountFragmentDirections с единственным методом actionSpecifyAmountFragmentToConfirmationFragment() , который возвращает объект NavDirections . Этот возвращенный объект NavDirections затем можно напрямую передать в navigate() , как показано в следующем примере:
Котлин
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); }
Для получения дополнительной информации о передаче данных между целевыми устройствами с использованием безопасных аргументов см. раздел «Использование безопасных аргументов для передачи данных с обеспечением типовой безопасности» в руководстве «Передача данных между целевыми устройствами» .