Безопасные аргументы

Рекомендуемый способ навигации между целевыми объектами — использование плагина 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);
}

Для получения дополнительной информации о передаче данных между целевыми устройствами с использованием безопасных аргументов см. раздел «Использование безопасных аргументов для передачи данных с обеспечением типовой безопасности» в руководстве «Передача данных между целевыми устройствами» .