Safe Args

Рекомендуемый способ навигации между пунктами назначения – использовать плагин Safe Args Gradle. Этот плагин генерирует классы объектов и построителей, которые обеспечивают типобезопасную навигацию между пунктами назначения. Используйте Safe Args для навигации и передачи данных между пунктами назначения.

Как включить Safe Args

Чтобы добавить функцию Safe Args в ваш проект, укажите следующий classpath в файле build.gradle верхнего уровня:

Классный

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

Котлин

buildscript {
    repositories {
        google()
    }
    dependencies {
        val nav_version = "2.10.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")
}

В файле gradle.properties необходимо добавить android.useAndroidX=true как описано в разделе "Переход на AndroidX" .

Сгенерированный код

После включения Safe Args сгенерированный код будет содержать классы и методы для каждого определенного вами действия, а также классы, соответствующие каждому пункту отправки и получения.

Safe Args генерирует класс для каждого пункта назначения, в котором начинается действие. Название сгенерированного класса будет состоять из названия исходного класса и слова Directions. Например, если исходный пункт назначения называется SpecifyAmountFragment, сгенерированный класс будет называться SpecifyAmountFragmentDirections.

Сгенерированный класс содержит статический метод для каждого действия, определенного в исходном пункте назначения. Этот метод принимает любые заданные параметры действия в качестве аргументов и возвращает объект NavDirections, который можно передать непосредственно в navigate().

Пример Safe Args

Например, рассмотрим граф навигации с одним действием, которое соединяет два пункта назначения: 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 в ваш проект, укажите следующий classpath в файле build.gradle верхнего уровня:

Классный

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

Котлин

buildscript {
    repositories {
        google()
    }
    dependencies {
        val nav_version = "2.10.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")
}

В файле gradle.properties необходимо добавить android.useAndroidX=true как описано в разделе "Переход на AndroidX" .

После включения Safe Args плагин генерирует код, содержащий классы и методы для каждого определенного вами действия. Для каждого действия Safe Args также генерирует класс для каждого исходного пункта назначения, из которого начинается действие. Название сгенерированного класса состоит из названия исходного класса пункта назначения и слова Directions. Например, если целевая страница называется 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 для передачи данных с типобезопасностью статьи Передача данных между пунктами назначения.