Рекомендуемый способ навигации между пунктами назначения — использовать плагин Safe Args Gradle. Этот плагин генерирует классы объектов и конструкторов, которые обеспечивают типобезопасную навигацию между пунктами назначения. Используйте Safe Args для навигации и передачи данных между пунктами назначения .
Включить безопасные аргументы
Чтобы добавить Safe Args в свой проект, включите следующий classpath
в файл build.gradle
верхнего уровня:
классный
buildscript { repositories { google() } dependencies { def nav_version = "2.8.2" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
Котлин
buildscript { repositories { google() } dependencies { val nav_version = "2.8.2" 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") }
У вас должно быть 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()
, как показано в следующем примере:
Котлин
override fun onClick(v: View) {
val amount: Float = ...
val action =
SpecifyAmountFragmentDirections
.actionSpecifyAmountFragmentToConfirmationFragment(amount)
v.findNavController().navigate(action)
}
Ява
@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. Этот плагин генерирует простые классы объектов и конструкторов, которые обеспечивают типобезопасную навигацию и передачу аргументов между пунктами назначения.
Чтобы добавить Safe Args в свой проект, включите следующий classpath
в файл build.gradle
верхнего уровня:
классный
buildscript { repositories { google() } dependencies { def nav_version = "2.8.2" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
Котлин
buildscript { repositories { google() } dependencies { val nav_version = "2.8.2" 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") }
У вас должно быть android.useAndroidX=true
в файле gradle.properties
в соответствии с переходом на AndroidX .
После включения Safe Args плагин генерирует код, содержащий классы и методы для каждого определенного вами действия. Для каждого действия Safe Args также генерирует класс для каждого исходного пункта назначения , который является пунктом назначения, из которого исходит действие. Сгенерированное имя класса представляет собой комбинацию имени исходного класса назначения и слова «Направления». Например, если место назначения называется 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) }
Ява
@Override public void onClick(View view) { NavDirections action = SpecifyAmountFragmentDirections .actionSpecifyAmountFragmentToConfirmationFragment(); Navigation.findNavController(view).navigate(action); }
Дополнительные сведения о передаче данных между пунктами назначения с помощью Safe Args см. в разделе Использование Safe Args для передачи данных с безопасностью типов в разделе Передача данных между пунктами назначения .