Навигация
Последнее обновление | Стабильный выпуск | Кандидат на выпуск | Бета-версия | Альфа-релиз |
---|---|---|---|---|
18 сентября 2024 г. | 2.8.1 | - | - | - |
Объявление зависимостей
Чтобы добавить зависимость от навигации, необходимо добавить в свой проект репозиторий Google Maven. Для получения дополнительной информации прочтите репозиторий Google Maven .
Добавьте зависимости для нужных вам артефактов в файл build.gradle
для вашего приложения или модуля:
классный
dependencies { def nav_version = "2.8.1" // Jetpack Compose Integration implementation "androidx.navigation:navigation-compose:$nav_version" // Views/Fragments Integration implementation "androidx.navigation:navigation-fragment:$nav_version" implementation "androidx.navigation:navigation-ui:$nav_version" // Feature module support for Fragments implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version" // Testing Navigation androidTestImplementation "androidx.navigation:navigation-testing:$nav_version" }
Котлин
dependencies { val nav_version = "2.8.1" // Jetpack Compose integration implementation("androidx.navigation:navigation-compose:$nav_version") // Views/Fragments integration implementation("androidx.navigation:navigation-fragment:$nav_version") implementation("androidx.navigation:navigation-ui:$nav_version") // Feature module support for Fragments implementation("androidx.navigation:navigation-dynamic-features-fragment:$nav_version") // Testing Navigation androidTestImplementation("androidx.navigation:navigation-testing:$nav_version") }
Безопасные аргументы
Чтобы добавить Safe Args в свой проект, включите следующий classpath
в файл build.gradle
верхнего уровня:
классный
buildscript { repositories { google() } dependencies { def nav_version = "2.8.1" classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
Котлин
buildscript { repositories { google() } dependencies { val nav_version = "2.8.1" 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 .
Информацию об использовании расширений Kotlin смотрите в документации ktx .
Дополнительные сведения о зависимостях см. в разделе Добавление зависимостей сборки .
Обратная связь
Ваши отзывы помогают сделать Jetpack лучше. Дайте нам знать, если вы обнаружите новые проблемы или у вас есть идеи по улучшению этой библиотеки. Пожалуйста, ознакомьтесь с существующими проблемами в этой библиотеке, прежде чем создавать новую. Вы можете добавить свой голос к существующей проблеме, нажав кнопку со звездочкой.
Дополнительную информацию см . в документации по системе отслеживания проблем .
Версия 2.8
Версия 2.8.1
18 сентября 2024 г.
Выпущен androidx.navigation:navigation-*:2.8.1
. Версия 2.8.1 содержит эти коммиты .
Новые возможности
- Добавлено новое правило проверки, гарантирующее использование функции
popBackStack
, которая принимает конкретный тип класса при попыткеpopBackStack
с использованием типобезопасных API. ( Ief161 , б/358095343 )
Исправления ошибок
- Для навигации теперь требуется, чтобы маршрут, передаваемый в
startDestination
NavGraph
, содержал значения для всех обязательных аргументов, включая аргументы, которые не допускают значения NULL и не имеют значения по умолчанию. ( I18e74 , б/362594265 ) - В аргументах навигационной безопасности добавлена поддержка строк, не допускающих значения NULL, так что значения «null» будут анализироваться и сохраняться в пакете как есть. Это отличается от существующего поведения, при котором «нулевые» значения анализируются в нулевой объект. Это изменение применимо только к строковым типам, не допускающим значения NULL. Строки, допускающие значение NULL, остаются неизменными. ( I08b4a , б/348936238 )
-
NavDestination
больше не может иметь глубокую ссылку, кроме как через глубокую ссылку, которая была явно добавлена к месту назначения. Это также означает, что вы можете перейти к маршруту пункта назначения только с помощью перегруженной функции навигации, которая принимает строковый маршрут. Это устраняет уязвимость, которая позволяла создать глубокую ссылку на потенциально защищенный пункт назначения. ( Ie30e6 )
Обновление зависимостей
- Navigation Safe Args теперь зависит от Kotlin 1.9.24, а не от Kotlin 2.X, что гарантирует, что разработчикам не придется обновляться. ( а4129а )
- Навигация Compose теперь зависит от Compose
1.7.2
.
Версия 2.8.0
4 сентября 2024 г.
Выпущен androidx.navigation:navigation-*:2.8.0
. Версия 2.8.0 содержит эти коммиты .
Важные изменения с версии 2.7.0
Навигация: Типовая безопасность Kotlin DSL
- Навигация теперь обеспечивает типобезопасность для Kotlin DSL (используемого Navigation Compose) с использованием сериализации Kotlin, что позволяет вам определять пункты назначения в навигационном графе с помощью типобезопасных объектов и классов данных:
// Define a home destination that doesn't take any arguments
@Serializable
object Home
// Define a profile destination that takes an ID
@Serializable
data class Profile(val id: String)
// Now define your NavHost using type safe objects
NavHost(navController, startDestination = Home) {
composable<Home> {
HomeScreen(onNavigateToProfile = { id ->
navController.navigate(Profile(id))
})
}
composable<Profile> { backStackEntry ->
val profile: Profile = backStackEntry.toRoute()
ProfileScreen(profile)
}
}
Дополнительную информацию см . в блоге «Навигация по компоновке и безопасности типов» .
Навигация Создание прогнозируемого возврата
- Navigation Compose теперь обеспечивает поддержку Predictive внутри приложения через новые API-интерфейсы
SeekableTransitionState
из compose-animation. Это позволяет вам использовать жест назад, чтобы увидеть предыдущий пункт назначения с вашим пользовательским переходом, прежде чем принять решение либо подтвердить транзакцию с помощью завершенного жеста, либо отменить ее.
Составной фрагмент навигации
- Добавлен новый артефакт
navigation-fragment-compose
, который включает альтернативуNavHostFragment
ComposableNavHostFragment
, которая позволяет добавлять составные пункты назначения в XML-файлы навигации. Каждоеcomposable
назначение должно быть выражено как метод@Composable
верхнего уровня без аргументов, полное имя которого используется в качестве атрибутаandroid:name
в каждом пункте назначения. При переходе к одному из этих пунктов назначения создается содержащий фрагмент для отображения составного содержимого.
// In HomeScreen.kt
@Composable
fun HomeScreen() {
// Your Composable content here
}
// In your navigation.xml
<composable
android:id="@+id/home_screen"
android:name="com.example.HomeScreenKt\$HomeScreen" />
Другие изменения
- Навигация Compose теперь зависит от Compose 1.7.0.
- Навигация теперь предоставляет новый класс
CollectionNavType<T>
, подклассNavType<T>
для аргументов на основе коллекций, таких как списки, массивы, карты. Все массивыNavType
по умолчанию (IntArrayType
,LongArrayType
,FloatArrayType
,BoolArrayType
иStringArrayType
) теперь наследуются от этого нового класса. -
NavType
теперь имеет встроенную поддержку списков Int, String, Boolean, Float и Long.
Версия 2.8.0-rc01
21 августа 2024 г.
Выпущен androidx.navigation:navigation-*:2.8.0-rc01
. Версия 2.8.0-rc01 содержит эти коммиты .
Исправления ошибок
- Исправлен сбой навигации при передаче классов Enum верхнего уровня в качестве типобезопасных аргументов. ( I0ba76 , б/358137294 )
- Навигация 2.8 теперь корректно работает с SDK 34 и не будет переключаться на SDK 35 до выхода версии 2.9 вместе с остальными библиотеками AndroidX. ( б/358798728 )
Версия 2.8.0-бета07
7 августа 2024 г.
Выпущен androidx.navigation:navigation-*:2.8.0-beta07
. Версия 2.8.0-beta07 содержит эти коммиты .
Известные проблемы
- Из-за b/358137294 по умолчанию поддерживаются только Enums, вложенные в другой класс. Перечисления верхнего уровня будут поддерживаться в следующем выпуске.
Исправления ошибок
- При навигации к повторяющимся или общим пунктам назначения приоритет отдается переходу к ближайшему совпадающему пункту назначения из текущего местоположения на графике. ( Ic89a4 , б/352006850 )
- В навигации по безопасным аргументам теперь добавлен новый
NavType.EnumType
. Это означает, что типыEnum
больше не требуют пользовательскихNavType
. Обратите внимание, чтоSerialName
Enum
должно быть полным именем по умолчанию. ( I66d22 , б/346475493 ) - В навигацию по безопасным аргументам добавлена встроенная поддержка типов аргументов, допускающих значение NULL, включая
Int?
,Long?
,Float?
,Boolean?
иEnum<*>?
. ( I32d13 , I1c580 , Ifba66 , I978b0 , Ide076 , b/351994237 ) -
startDestination
NavGraph
теперь будет использовать значения аргументов по умолчанию, если маршрутstartDestination
переданный вNavGraph
в точности равенstartDestination.route
. ( I13762 , б / 354046047 )
Версия 2.8.0-бета06
24 июля 2024 г.
Выпущен androidx.navigation:navigation-*:2.8.0-beta06
. Версия 2.8.0-beta06 содержит эти коммиты .
Исправления ошибок
- Исправлена проблема, из-за которой проверки
WrongStartDestinationType
не проверяли объекты Companion в переданном типе класса, из-за чего lint не мог обнаружить ошибку. ( I92b09 )
Версия 2.8.0-бета05
10 июля 2024 г.
Выпущен androidx.navigation:navigation-*:2.8.0-beta05
. Версия 2.8.0-beta05 содержит эти коммиты .
Исправления ошибок
- Исправлен сбой навигации
singleTop
, когда вложенныеNavGraphs
используют один и тот же маршрутstartDestination
. ( I17b94 , б/294408596 )
Версия 2.8.0-бета04
26 июня 2024 г.
Выпущен androidx.navigation:navigation-*:2.8.0-beta04
. Версия 2.8.0-beta04 содержит эти коммиты .
Исправления ошибок
- Навигация теперь поддерживает навигацию с пустыми строками в аргументах пути. ( Ic5dbd , б/339481310 )
- Улучшите сообщение об ошибке для пользовательских сериализаторов, объявленных непосредственно в полях класса через
@Serializable(with =...)
чтобы уточнить, что в настоящее время эта функция не поддерживается. ( I052b0 , б/341319151 ) - API-интерфейс теста
SavedStateHandleFactory
теперь можно использовать в тестах, отличных от Android, но для поддержки анализа аргументов с помощью Bundles потребуется Robolectric. ( I76cdc , б / 340966212 ) - Исправлен сбой при восстановлении состояния при возобновлении работы приложения после смерти процесса с использованием типобезопасной навигации в Compose. ( Ia8f38 , б/341801005 )
- Исправлена проблема в навигационной компоновке, из-за которой после отмены прогнозируемого жеста возврата элемент
NavBackStackEntry
, к которому возвращается пользователь, никогда не возвращается в состояниеRESUMED
жизненного цикла. Это также гарантирует, что возвращающийся пункт назначения правильно анимируется, а не фиксируется на месте после броска. ( I97a0c , б/346608857 ) - При использовании функции Predictive Back с функцией Navigation Compose отображаемый пункт назначения теперь будет иметь правильный z-порядок и правильно анимироваться поверх входящего пункта назначения. ( I2077b , б/345993681 )
Версия 2.8.0-бета03
12 июня 2024 г.
Выпущен androidx.navigation:navigation-*:2.8.0-beta03
. Версия 2.8.0-beta03 содержит эти коммиты .
Изменения API
-
CollectionNavType
имеет новый абстрактный методemptyCollection()
. Переопределите это, чтобы обрабатывать пустую коллекцию, переданную в качестве аргумента. ( Ie4d84 , б/341723133 )
Исправления ошибок
- Добавлена документация по
NavType.serializeAsValue
иserializeAsValues
чтобы подчеркнуть, что окончательные выходные данные должны быть закодированы Uri. ( Ида6бд , б/344943214 ) - Исправлен сбой при вызове
toRoute<T>
с нулевым аргументомCollectionNavType
. При навигации с нулевым значениемCollectionNavType
выходным аргументом будет значение по умолчанию, объявленное в вашем классе Serializable, или возвращаемое значениеemptyCollection()
, если значение по умолчанию отсутствует. ( I84158 , Id630f , б/342672856 )
Версия 2.8.0-бета02
29 мая 2024 г.
Выпущен androidx.navigation:navigation-*:2.8.0-beta02
. Версия 2.8.0-beta02 содержит эти коммиты .
Исправления ошибок
- Исправлен сбой
ClassCastException
при использованииNavBackStackEntry.toRoute
с пользовательскимNavType
, допускающим значение NULL. ( I1c29b , б/342239473 ) - Исправлены проблемы с восстановлением состояния обратного стека навигации, возникающие при попытке восстановить запись обратного стека, которая недоступна по идентификатору из текущего пункта назначения. Поскольку маршруты поддерживаются идентификаторами, это также затронуло пункты назначения, построенные с использованием маршрутов. Это также устраняет сбой, вызванный вызовом метода
clearBackStack()
, который имел ту же основную проблему. ( I423c3 , б/339908057 )
Версия 2.8.0-бета01
14 мая 2024 г.
Выпущен androidx.navigation:navigation-*:2.8.0-beta01
. Версия 2.8.0-beta01 содержит эти коммиты .
Изменения API
-
SavedStateHandle.toRoute()
теперь принимает параметрtypeMap
для пользовательских типов аргументов. ( Ie39fb , б/339026523 ) - В
navigation-testing
добавлен тестовый API для созданияSavedStateHandle
из сериализуемого объекта Kotlin. ( Ид4867 , б/339080702 )
Исправления ошибок
- Добавлены недостающие документы по параметрам для функций Navigation Kotlin DSL. ( I26a36 )
Версия 2.8.0-альфа08
1 мая 2024 г.
Выпущен androidx.navigation:navigation-*:2.8.0-alpha08
. Версия 2.8.0-alpha08 содержит эти коммиты .
Безопасные аргументы в навигации
- Работа по поддержке безопасности типов во время компиляции для Navigation Compose и пользователей Navigation Kotlin DSL на основе сериализации Kotlin завершена, и ранее экспериментальные API теперь стабильны. ( Iea94d , I0eb0d , I873b7 , I3a64b , I6c3a2 , I11f0b , Ic3032 , I8d394 , I95710 , Ice060 , Id0e55 , I45f8b , Idcdaf , If5380 , I08b23 , Ia5c59 , б/188693139 )
Эта функция использует сериализацию Kotlin , чтобы вы могли определять пункты назначения в графе навигации с помощью типобезопасных объектов и классов данных:
// Define a home destination that doesn't take any arguments
@Serializable
object Home
// Define a profile destination that takes an ID
@Serializable
data class Profile(val id: String)
// Now define your NavHost using type safe objects
NavHost(navController, startDestination = Home) {
composable<Home> {
HomeScreen(onNavigateToProfile = { id ->
navController.navigate(Profile(id))
})
}
composable<Profile> { backStackEntry ->
val profile: Profile = backStackEntry.toRoute()
ProfileScreen(profile)
}
}
Дополнительную информацию см . в блоге «Навигация по компоновке и безопасности типов» .
Новые возможности
- Артефакт
navigation-fragment-compose
теперь предоставляет композициюLocalFragment
локальную для составных методов внутриComposableFragment
. ( Если35e5 ) -
NavType
теперь имеет встроенную поддержку списков Int, String, Boolean, Float и Long. ( I4b6dd , Ia914c , b/188693139 )
Версия 2.8.0-альфа07
17 апреля 2024 г.
Выпущен androidx.navigation:navigation-*:2.8.0-alpha07
. Версия 2.8.0-alpha07 содержит эти коммиты .
Новые возможности
Добавляет новый артефакт
navigation-fragment-compose
, который включает альтернативуNavHostFragment
ComposableNavHostFragment
, которая позволяет добавлятьcomposable
пункты назначения в XML-файлы навигации. Каждоеcomposable
назначение должно быть выражено как метод@Composable
верхнего уровня без аргументов, полное имя которого используется в качестве атрибутаandroid:name
в каждом пункте назначения. При переходе к одному из этих пунктов назначения создается содержащий фрагмент для отображения составного содержимого. ( I0ef2e , б/265480755 )// In HomeScreen.kt @Composable fun HomeScreen() { // Your Composable content here }
// In your navigation.xml <composable android:id="@+id/home_screen" android:name="com.example.HomeScreenKt\$HomeScreen" />
Изменения API
- Продолжалась поддержка Safe Args в Navigation Compose с использованием подхода, основанного на сериализации Kotlin. Эти API еще не завершены и отмечены аннотацией
ExperimentalSafeArgsApi
. Эта аннотация будет удалена, когда вся поверхность API будет завершена в будущем выпуске. ( Iefd95 , I409c8 , I5b5ac , I7e753 , I960f8 , I3eabd , I8ed5a , Ied2c9 , I9b73c , I554db , Ib3aba , Ia668d , b/188693139 )
Версия 2.8.0-альфа06
3 апреля 2024 г.
Выпущен androidx.navigation:navigation-*:2.8.0-alpha06
. Версия 2.8.0-alpha06 содержит эти коммиты .
Изменения API
- Началась поддержка Safe Args в Navigation Compose с использованием подхода, основанного на сериализации Kotlin. Эти API еще не завершены и отмечены аннотацией
ExperimentalSafeArgsApi
. Эта аннотация будет удалена, когда вся поверхность API будет завершена в будущем выпуске. ( I644e7 , I98896 , I2a1c5 , I43a51 , I836a1 , Ic5eec , I39407 , I24e41 , If9e14 , Ibb13e , If44d3 , Icb70f , I8972f , I1d432 , Icf32b , I20a14 , I262aa , I7de99 , I35990 , I1033d , b/188693139 )
Исправления ошибок
-
NavHost
теперь использовалAlignment.TopStart
в качестве аргумента contentAlignment по умолчанию. Это приводит его в соответствие со значением по умолчанию дляAnimatedContent
и исправляет некоторые случаи неожиданного масштабирования при переходе по центру. ( I09e72 , б/330111602 ) - При нажатии интеллектуального жеста назад во время использования Navigation Compose
NavHost
теперь правильно завершает пользовательский переход, а не немедленно завершает его. ( I99017 , б/327292110 )
Версия 2.8.0-альфа05
20 марта 2024 г.
Выпущен androidx.navigation:navigation-*:2.8.0-alpha05
. Версия 2.8.0-alpha05 содержит эти коммиты .
Новые возможности
- Теперь вы можете передавать аргументы в
startDestination
NavGraph
непосредственно в маршрутеstartDestination
, не полагаясь наdefaultValue
. Это также относится и к вложенным объектамstartDestinations
NavGraph
. ( I0e0b5 , б/109505019 , б/188693139 )
Изменения API
- Добавлен новый абстрактный класс
CollectionNavType<T>
, подклассNavType<T>
для аргументов на основе коллекций, таких как списки, массивы, карты. ( Ic6d63 , б/188693139 ) - Все массивы
NavType
по умолчанию (IntArrayType
,LongArrayType
,FloatArrayType
,BoolArrayType
иStringArrayType
) теперь относятся к типуCollectionNavType
( Idcf79 , b/188693139 ). -
NavType
теперь предоставляет новый открытый APIvalueEquals
, который определяет, равны ли два значения одного типа друг другу. ( I6cb97 , б/327229511 )
Исправления ошибок
- Параметры запроса в глубоких ссылках теперь допускают значения в форме фигурных скобок вокруг имени аргумента (т. е.
{argName}
) в качестве допустимых значений для строковыхNavTypes
. Это устраняет проблему, из-за которой такое значение считалось недействительным (или отсутствовало значение) для всех типов. ( I18302 , б/327274038 ) - Функции
NavController
, поддерживающие такие маршруты, какnavigate
илиpopBackStack
теперь могут правильно сопоставлять маршруты, заполненные аргументами ArrayNavTypes
. ( Iea805 , б/327229511 )
Версия 2.8.0-альфа04
6 марта 2024 г.
Выпущен androidx.navigation:navigation-*:2.8.0-alpha04
. Версия 2.8.0-alpha04 содержит эти коммиты .
Новые возможности
- Теперь вы можете указать
SizeTranform
для своих переходов в Navigation Compose, определив их как часть инициализацииcomposable
и/илиnavigation
функций. ( I91062 , б / 296912651 )
Исправления ошибок
- Исправлена проблема, из-за которой
NavHost
в меню «Создать навигацию» не отображал должным образом переход при использовании «Назад к системе» без жестов. ( Iceeae , б/325998468 )
Версия 2.8.0-альфа03
21 февраля 2024 г.
Выпущен androidx.navigation:navigation-*:2.8.0-alpha03
. Версия 2.8.0-alpha03 содержит эти коммиты.
Изменения API
-
NavBackStackEntry.savedStateHandle
теперь помечен как@MainThread
, поскольку он в любом случае использует код, который в любом случае должен находиться в основном потоке. ( Ibb988 , б / 299523245 )
Исправления ошибок
- Исправлена проблема в навигации, из-за которой модели представления
NavGraph
былиDESTROYED
слишком рано, посколькуViewModel
связанной записи не была частью сохраненного состояния. ( Ib6bb7 , b/317581849 )
Обновление зависимостей
- Навигация Compose теперь зависит от Compose 1.7.0-alpha03 .
Версия 2.8.0-альфа02
7 февраля 2024 г.
Выпущен androidx.navigation:navigation-*:2.8.0-alpha02
. Версия 2.8.0-alpha02 содержит эти коммиты.
Новые возможности
- Navigation Compose теперь обеспечивает поддержку Predictive внутри приложения через новые API-интерфейсы
SeekableTransitionState
из compose-animation. Это позволяет вам использовать жест назад, чтобы увидеть предыдущий пункт назначения с вашим пользовательским переходом, прежде чем принять решение либо подтвердить транзакцию с помощью завершенного жеста, либо отменить ее. ( I8b8e9 )
Версия 2.8.0-альфа01
24 января 2024 г.
Выпущен androidx.navigation:navigation-*:2.8.0-alpha01
. Версия 2.8.0-alpha01 содержит эти коммиты.
Исправления ошибок
- Исправлена утечка
BackStackState
, из-за которой несколько вызововsaveState
в пункте назначения приводили к сохранению нескольких состояний, но восстановить можно было только первое. ( I598b0 , б/309559751 ) - Исправлена проблема, из-за которой аргументы, отличные от String, не отображались должным образом при использовании помощников
NavigationUI
для заполнения заголовков панелей приложений. ( #636 , б/316676794 )
Обновление зависимостей
- Навигация Compose теперь зависит от Compose
1.7.0-alpha01
исправляющего проблему, которая могла привести к неожиданному масштабированию анимации. ( б/297258205 )
Внешний вклад
- Спасибо SimonMarquis за исправление проблемы с отображением нестроковых аргументов при использовании помощников
NavigationUI
для заполнения заголовков панелей приложений.
Версия 2.7.7
Версия 2.7.7
7 февраля 2024 г.
Выпущен androidx.navigation:navigation-*:2.7.7
. Версия 2.7.7 содержит эти коммиты.
Исправления ошибок
- Перенесено из навигации
2.8.0-alpha01
: исправлена утечкаBackStackState
, из-за которой несколько вызововsaveState()
для одногоNavBackStackEntry
приводили к сохранению нескольких состояний, но восстановить можно было только первое сохраненное состояние. ( I598b0 , б/309559751 ) - Перенесено из навигации
2.8.0-alpha01
: исправлена проблема, из-за которой нестроковые аргументы не отображались должным образом при использовании помощниковNavigationUI
для заполнения заголовков панелей приложений. ( #636 , б/316676794 )
Внешний вклад
- Спасибо SimonMarquis за исправление проблемы с отображением нестроковых аргументов при использовании помощников
NavigationUI
для заполнения заголовков панелей приложений.
Версия 2.7.6
Версия 2.7.6
13 декабря 2023 г.
Выпущен androidx.navigation:navigation-*:2.7.6
. Версия 2.7.6 содержит эти коммиты.
Исправления ошибок
- Функция
NavGraph
equals()
теперь корректно учитывает узлы другого графа, а не только вызывающего. Это гарантирует, что графы с узлами с разными идентификаторами больше не будут считаться равными ( I401cb , b/311414915 ).
Версия 2.7.5
Версия 2.7.5
1 ноября 2023 г.
Выпущен androidx.navigation:navigation-*:2.7.5
. Версия 2.7.5 содержит эти коммиты.
Улучшения производительности
- Значительно улучшена производительность (как по времени, так и по количеству выделений) при сравнении двух графиков. Это означает, что такие вызовы, как
setGraph
, которые внутренне сравнивают новый граф с существующим, выполняются намного быстрее и приводят к меньшему количеству пропущенных кадров. Спасибо Михалу З за тщательный анализ, который привел к этому улучшению. ( I6ad62 ) -
NavHost
теперь будет отображать начальный пункт назначения на первом проходе композиции вместо того, чтобы ждать второго прохода для чтения обновленного состояния. ( I439a7 , б/304852206 )
Исправления ошибок
- Исправлена проблема, из-за которой ваш задний стек выскакивал, если вы вызывали
setGraph
более одного раза с одним и тем же графом, только если в вашем графике был пункт назначения, содержащий действие, связывающее два пункта назначения. ( Ieaed7 ) - Диалоги, к которым быстро переходили и закрывали, больше не будут просачиваться в список
NavController.visibleEntries
. ( I67586 , б / 287969970 ) - Когда запись извлекается с последующим изменением конфигурации,
ViewModel
записи теперь будет очищаться правильно, еслиsaveState
имеет значение false. ( Idf242 , б / 298164648 ) - Исправлена проблема, из-за которой
NavController
мог обрабатывать одну и ту же глубокую ссылку более одного раза, если задний стек был полностью пуст до изменения конфигурации или вызоваsetGraph
только когда для входящего намерения был установлен флагFLAG_ACTIVITY_NEW_TASK
. ( I73c7f )
Обновления зависимостей
- Навигация с помощью фрагментов теперь зависит от Fragment 1.6.2 , что устраняет проблему, из-за которой экземпляры
ViewModel
вложенных фрагментов не очищались приclearBackStack
.
Версия 2.7.4
Версия 2.7.4
4 октября 2023 г.
Выпущен androidx.navigation:navigation-*:2.7.4
. Версия 2.7.4 содержит эти коммиты.
Новые возможности
- Добавлена поддержка
popUpTo
для использования маршрутов с аргументами, позволяющих вернуться к определенной записи, которая использует именно эти аргументы, что соответствует поддержке, найденной вpopBackStack
. ( I731f4 , б / 299255572 )
Исправления ошибок
- Исправлена проблема, из-за которой прерывание навигации с помощью другой навигации с помощью
popUpTo
приводило к сбоюFragmentNavigator
. ( I3c848 , б/301887045 ) - Исправлена проблема, из-за которой нажатие системы назад приводило к тому, что
currentDestination
не обновлялся правильно в соответствии с отображаемым фрагментом. ( Id0d6c , б/289877514 ) - Жизненный цикл
DialogFragment
теперь корректно переходит в состояниеRESUMED
, когда диалоговое окно над ним закрывается. ( I88f0d , б/301811387 )
Версия 2.7.3
Версия 2.7.3
20 сентября 2023 г.
Выпущен androidx.navigation:navigation-*:2.7.3
. Версия 2.7.3 содержит эти коммиты.
Исправления ошибок
- Исправлена проблема в навигации с фрагментами, из-за которой список
visibleEntries
содержал неверные записи. ( I5caa9 , б / 288520638 ) - Исправлена проблема, из-за которой пункт назначения плавающего окна (т. е.
Dialogs
,Bottomsheets
и т. д.) никогда не получал обратный вызовRESUMED
Lifecycle. ( I3b866 , б / 287505132 )
Версия 2.7.2
Версия 2.7.2
6 сентября 2023 г.
Выпущен androidx.navigation:navigation-*:2.7.2
. Версия 2.7.2 содержит эти коммиты.
Исправления ошибок
- Навигация теперь зависит от жизненного цикла
2.6.2
, исправляя взаимодействие междуrememberSaveable
иNavHost
Navigation Compose, которое могло привести к тому, что состояниеrememberSaveable
пунктов назначения и любые экземплярыSavedStateHandle
, принадлежащиеViewModel
не будут должным образом восстановлены после смерти и воссоздания процесса. ( б / 298059596 , б / 289436035 ) - Исправлена проблема при одновременном отображении нескольких диалогов в Navigation Compose, когда частично скрытые диалоги (например, не самый верхний диалог) находились в состоянии
CREATED
Lifecycle, а не в состоянииSTARTED
. ( аосп/2728520 , б/289257213 ) - Исправлена проблема при одновременном отображении нескольких диалогов в Navigation Compose, из-за которой закрытие самого верхнего диалога приводило к тому, что новый самый верхний диалог зависал в состоянии жизненного цикла
STARTED
а не в состоянииRESUMED
. ( аосп/2629401 , б/286371387 ) - Navigation Safe Args больше не создает экземпляр своей задачи, если она фактически не выполняется. ( I0e385 , б/260322841 )
Обновление зависимостей
- Навигация Compose теперь зависит от Compose 1.5.1.
Версия 2.7.1
Версия 2.7.1
23 августа 2023 г.
Выпущен androidx.navigation:navigation-*:2.7.1
. Версия 2.7.1 содержит эти коммиты.
Исправления ошибок
- Исправлены проблемы в навигации с помощью Compose, из-за которых при использовании
Scaffold
можно было получить ошибку при попытке доступа кLifecycle.State.DESTROYED
ViewModel
. ( I1dc11 , б/268422136 )
Версия 2.7.0
Версия 2.7.0
9 августа 2023 г.
Выпущен androidx.navigation:navigation-*:2.7.0
. Версия 2.7.0 содержит эти коммиты.
Важные изменения с версии 2.6.0
Анимации от концертмейстера
Теперь, когда AnimatedContent
стабилен, мы смогли переместить код из Accompanist Navigation Animation обратно в сам Navigation Compose.
Это означает, что вся поддержка настройки пользовательских переходов, существовавшая в AnimatedNavHost
напрямую поддерживается в NavHost
.
Никаких дополнительных изменений в Accompanist Navigation Animation внесено не будет, и мы скоро официально прекратим ее поддержку вместе с руководством по переходу обратно на сам Navigation Compose, но это будет обратная версия руководства по миграции , и никаких других изменений API не потребуется. если вы уже используете последнюю альфа-версию Accompanist ( 0.31.2-alpha
). ( р/197140101 )
Исправления ошибок
- NavHost в Navigation Compose теперь правильно перехватывает системные обратные вызовы даже после того, как действие было остановлено и возобновлено. ( Icb6de , б/279118447 )
Обновления зависимостей
- Навигация теперь зависит от Compose
1.5.0
с версии1.1.0
.
Версия 2.7.0-rc01
26 июля 2023 г.
androidx.navigation:navigation-*:2.7.0-rc01
выпущен. Версия 2.7.0-rc01 содержит эти коммиты.
Исправления ошибок
- Исправлена проблема, из-за которой лямбда-выражения
EnterTransition
иExitTransition
созданные как частьNavHost
потенциально могли оставаться в памяти даже после удаленияNavHost
из композиции. ( I893d0 )
Известные проблемы
- В Navigation 2.6.x существует проблема, заключающаяся в том, что при навигации с помощью popUpTo можно вызвать исключение
IllegalArgumentException
. Вполне возможно, что этого исключения можно избежать, реструктурировав свой график, аналогично совету, предложенному здесь . ( б / 287133013 )
Версия 2.7.0-бета02
28 июня 2023 г.
Выпущен androidx.navigation:navigation-*:2.7.0-beta02
. Версия 2.7.0-beta02 содержит эти коммиты.
Исправления ошибок
- Navigation Compose теперь имеет правильный z-порядок для пользовательских переходов, использующих навигацию с опцией
popUpTo
. ( /Ib1c3a , b/285153947 ).
Версия 2.7.0-бета01
7 июня 2023 г.
Выпущен androidx.navigation:navigation-*:2.7.0-beta01
. Версия 2.7.0-beta01 содержит эти коммиты.
Исправления ошибок
-
NavHost
в Navigation Compose теперь корректно перехватывает системные обратные вызовы даже после того, какActivity
былоSTOPPED
иRESUMED
. ( Icb6de , б/279118447 )
Версия 2.7.0-альфа01
24 мая 2023 г.
Выпущен androidx.navigation:navigation-*:2.7.0-alpha01
. Версия 2.7.0-alpha01 содержит эти коммиты.
Анимации от концертмейстера
Теперь, когда AnimatedContent
стабилен, мы смогли переместить код из Accompanist Navigation Animation обратно в сам Navigation Compose.
Это означает, что вся поддержка настройки пользовательских переходов, существовавшая в AnimatedNavHost
напрямую поддерживается в NavHost
.
Никаких дополнительных изменений в Accompanist Navigation Animation внесено не будет, и вскоре мы официально прекратим ее поддержку вместе с инструкциями по переходу обратно на сам Navigation Compose, но это будет обратная версия руководства по миграции , и никаких других изменений API не потребуется. если вы уже используете последнюю альфа-версию Accompanist ( 0.31.2-alpha
). ( р/197140101 )
Исправления ошибок
- Из навигации
2.6.0-rc02
: исправлена проблема с навигацией во фрагментах, из-за которой навигация с помощьюpopUpTo
и извлечение фрагмента из заднего стека без воссоздания его представления приводила к прекращению работы системы. ( Ieb8d4 , б/281726455 )
Обновления зависимостей
- Навигация теперь зависит от Compose
1.5.0-beta01
.
Версия 2.6.0
Версия 2.6.0
7 июня 2023 г.
Выпущен androidx.navigation:navigation-*:2.6.0
. Версия 2.6.0 содержит эти коммиты.
Важные изменения в навигации с версии 2.5.0.
-
arguments
NavBackStackEntry
иarguments
передаваемые вOnDestinationChangedListener
теперь являются лишь копией неизменяемых аргументов, которые были созданы при переходе к месту назначения. Это означает, что любые изменения, внесенные в эти пакеты, не будут отражены при последующих обращениях кarguments
или другим экземплярамOnDestinationChangedListener
. -
NavDeepLink
теперь поддерживает значения по умолчанию для массивов, что позволяет поддерживать повторяющиеся параметры запроса, которые будут сопоставляться с типом массива аргумента.NavType
также теперь включает метод по умолчанию, который можно переопределить для объединения двух проанализированных значений. - Пользовательские подклассы
NavType
теперь могут переопределятьserializeAsValue
для сериализации значения в String, что позволяет полностью инкапсулировать как сериализацию, так и десериализацию (черезparseValue
) в классеNavType
.StringType
теперь переопределяет этот метод для вызоваUri.encode
для даннойString
.
Важные изменения в Navigation Compose с версии 2.5.0.
- При предварительном просмотре составного объекта с помощью
NavHost
теперь по умолчанию будет отображатьсяstartDestination
NavGraph. -
NavController.popBackStack(route)
,NavController.getBackStackEntry(route)
,NavController.clearBackStack(route)
теперь поддерживают маршруты с частично или полностью заполненными аргументами. Обратите внимание, что аргументы должны точно совпадать с аргументами записи. - Попытка создать пустую ссылку
NavDeepLink
с использованием DSLnavDeepLink
Kotlin теперь приведет к появлению предупреждения о том, что для глубокой ссылки необходимы uri, action и/или mimetype, чтобы быть действительными.
Важные изменения в навигации с помощью фрагментов с версии 2.5.0.
-
NavHostFragment
больше не перехватывает саму кнопку возврата системы. Это позволяет базовомуFragmentManager
обрабатывать систему обратно. Это позволяет Fragment1.7.0-alpha01
и выше обеспечивать анимацию прогнозируемого возврата в приложении на устройствах Android U. - При использовании навигации с фрагментами попытка вручную выполнить
FragmentTransaction
, добавляющую фрагмент в задний стекFragmentManager
теперь будет вызывать исключениеIllegalArgumentException
. Всегда следует добавлять фрагменты через APInavigate()
. - При использовании точной строки
${applicationId}
в качестве заполнителя вapp:data
иapp:dataPattern
в элементе активности навигационного XML-файла заполнитель будет автоматически заполненpackageName
контекста при инфляции. -
FragmentNavigator
теперь использует API перехода при навигации и извлеченииNavBackStackEntries
. Это означает, чтоLifecycle
NavBackStackEntry
теперь будет ждать завершения специальных эффектов входящего и выходящего фрагмента, прежде чем перемещать свой последнийLifecycle.State
. -
DialogFragmentNavigator
теперь использует API перехода при навигации и извлеченииNavBackStackEntries
. Это означает, чтоLifecycle
NavBackStackEntry
теперь будет ждать, покаLifecycle
DialogFragment
перейдет вDESTROYED
прежде чем перейти к самомуDESTROYED
. -
NavHostFragment
теперь позволяет вам получитьNavController
сразу после присоединенияNavHostFragment
кFragmentManager
, а не только послеonCreate()
. - Поддержка навигации для модулей динамических функций теперь зависит от детальной библиотеки доставки функций Play.
- Navigation Safe Args теперь зависит от подключаемого модуля Android Gradle версии 7.3.0. Это означает, что теперь он совместим только с версиями 7.3.0+.
Важные изменения в NavigationUI с версии 2.5.0.
- При передаче идентификатора графа навигации в
AppBarConfiguration
(например, черезMenu
)NavigationUI
теперь рассматривает только начальный пункт назначения этого графа навигации как пункт назначения верхнего уровня, а не неправильно помечает каждый пункт назначения в графе как пункт назначения верхнего уровня. Поведение передачи идентификатора отдельного пункта назначения не изменилось. Эта же функциональность доступна для вашего собственного кода через новую функциюisTopLevelDestination
вAppBarConfiguration
. - Интеграция
setupWithNavController
вNavigationUI
для работы с верхней панелью приложения теперь будет анализировать значенияR.string
для аргументовReferenceType
, найденных в вашемandroid:label
в их значения String вместо вывода автоматически сгенерированного целого числа ресурса. -
NavigationUI
теперь предоставляет журналы, когда не удается перейти по выбранномуMenuItem
.
Версия 2.6.0-rc02
24 мая 2023 г.
Выпущен androidx.navigation:navigation-*:2.6.0-rc02
. Версия 2.6.0-rc02 содержит эти коммиты.
Исправления ошибок
- Исправлена проблема с навигацией во фрагментах, из-за которой навигация с помощью
popUpTo
и извлечение фрагмента из заднего стека без воссоздания его представления приводила к тому, что система обратно переставала работать. ( Ieb8d4 , б/281726455 )
Версия 2.6.0-rc01
10 мая 2023 г.
Выпущен androidx.navigation:navigation-*:2.6.0-rc01
. Версия 2.6.0-rc01 содержит эти коммиты.
Исправления ошибок
- Исправлена проблема в навигации с фрагментами, из-за которой удаление фрагмента с помощью навигации с помощью
popUpTo
в обратном вызове жизненного циклаonResume()
могло вызвать исключениеIllegalStateException
. ( I21884 , б / 279644470 )
Версия 2.6.0-бета01
19 апреля 2023 г.
Выпущен androidx.navigation:navigation-*:2.6.0-beta01
. Версия 2.6.0-beta01 содержит эти коммиты.
Новые возможности
-
NavBackStackEntry
теперь предоставляет собственную реализациюtoString
. ( Ifff00b )
Исправления ошибок
- При использовании навигации с фрагментами попытка вручную выполнить
FragmentTransaction
, добавляющую фрагмент в задний стекFragmentManager
теперь будет вызывать исключениеIllegalArgumentException
. Всегда следует добавлять фрагменты через APInavigate()
. ( I6d38e ) - Когда есть
navigate
, которая добавляет запись, иpopBackStack
, который удаляет ее в одном и том же кадре, результирующая верхняя запись в заднем стеке теперь последовательно возвращается вRESUMED
Lifecycle.State
. ( Id8067 , б / 276495952 )
Версия 2.6.0-альфа09
5 апреля 2023 г.
Выпущен androidx.navigation:navigation-*:2.6.0-alpha09
. Версия 2.6.0-alpha09 содержит эти коммиты.
Исправления ошибок
- Исправлены проверки на недопустимый маршрут, например, если
NavDestination
содержитNavArgument
не допускающий значения NULL, маршрут этого пункта назначения должен содержать заполнители для аргументов, названных так же, какNavArgument
не допускающий значения NULL. ( Ic62bf , б/274697949 ) - Навигация по глубоким ссылкам на основе
Action/MimeType
теперь будет завершаться неудачей, если в операции навигации отсутствуетNavArgument
не допускающий значения NULL, требуемыйNavDestination
, которому соответствуетAction/MimeType
. ( Ибфа17 , б/271777424 ) - Когда
NavController
устанавливает граф с тем же маршрутом и пунктами назначения, что и предыдущий граф, он теперь правильно заменяет текущие узлы графа и пункты назначения обратного стека новыми экземплярами. Это устраняет сбой при использованииonLaunchSingleTop
без сохранения состояния в Navigation Compose. Это также исправляет ошибку, при которой переход к местам назначения, связанным с построением корневого графа, и неправильный обратный стек. ( I5bc58 , б/275258161 , б/275407804 )
Версия 2.6.0-альфа08
22 марта 2023 г.
Выпущен androidx.navigation:navigation-*:2.6.0-alpha08
. Версия 2.6.0-alpha08 содержит эти коммиты.
Новые возможности
-
NavHostFragment
теперь позволяет вам получитьNavController
сразу после присоединенияNavHostFragment
кFragmentManager
, а не только послеonCreate()
. ( Ic6382 , б/220186282 )
Исправления ошибок
- Исправлено исключение
NullPointerException
при извлечении вложенного графика, содержащего аргумент, не допускающий значения NULL. ( 6б3581 , б/249988437 ) - При возврате системы после навигации с помощью
popUpTo
состояниеNavController
появится в правильной записи. ( I3a8ec , б/270447657 ) -
FragmentNavigator
теперь правильно извлекает записи, когда задний стек извлекается через систему back илиpopBackStack()
, а также независимо от того, использует ли транзакция эффекты для фрагмента. ( I81bdf ) - Добавление фрагментов в
FragmentNavigator
FragmentManager
без использования навигации больше не будет вызывать сбой. ( б17204 , б/274167493 )
Обновления зависимостей
- Навигация теперь зависит от жизненного цикла
2.6.1
. ( 586fe7 ) - Навигация теперь зависит от SavedState
1.2.1
. ( 078e4e ) - Навигация теперь зависит от ProfileInstaller
1.3.0
. ( 512f0c )
Версия 2.6.0-альфа07
8 марта 2023 г.
Выпущен androidx.navigation:navigation-*:2.6.0-alpha07
. Версия 2.6.0-alpha07 содержит эти коммиты.
Исправления ошибок
- Варианты API
getBackStackEntry
,popBackStack
,clearBackStack
использующие маршруты, теперь используют шаблоны маршрутов с аргументами, допускающими значение NULL, и параметрами запроса, допускающими значение NULL ( I22294 , b/269302500 ). - Исправлена проблема, в которой вызов
clearBackStack()
изNavController
не очистил бы сохраненное состояние в управляющем фрагментами, связанным со стеком очистки. ( IC1CCE , B/271190202 ) - Исправлена регрессия в 2.6.0-Alpha06, которая вызвала подставку неверного
MenuItem
вBottomNavigationView
при использовании системы обратно между вкладками. ( I634F6 , B/2704447657 ) - Фиксированная регрессия в 2.6.0-alpha06, которая заставила
NavBackStackEntry
S не перемещаться в возобновляемое состояние при использованииAnimation
S. ( IB3589 , B/269646882 )
Версия 2.6.0-Alpha06
22 февраля 2023 г.
androidx.navigation:navigation-*:2.6.0-alpha06
выпускается. Версия 2.6.0-Alpha06 содержит эти коммиты.
Новые возможности
- При предварительном просмотре композиции с
NavHost
теперь он будет показыватьstartDestination
NavGraph по умолчанию. ( I2b89f )
Изменения API
- Все перегрузки
navigate
NavController
теперь аннотируются с@MainThread
чтобы убедиться, что они вызываются в главном потоке. ( I2c0b0 , b/263427111 )
Исправления ошибок
- Исправлена сбой при попытке навигации при использовании динамической навигации фрагментов. ( I3ee29 , b/268360479 )
- Исправлена ошибка, при которой навигация к другому фрагменту через системную кнопку обратной стороны не обновляет нижнюю панель до правильного выбранного элемента ( IF559F , b/2690444426 )
Известные проблемы
- При использовании навигации с фрагментами жизненный цикл
NavBackStackEntry
не может достигатьRESUMED
при использовании API -интерфейсовAnimation
. ( B/269646882 ) - При использовании навигации с фрагментами и навигацией с
BottomNavigation
, если вы пытаетесь восстановить задний стек с несколькими записями,BottomMenuItem
не обновляется правильно. ( B/270447657 ) - При использовании навигации с фрагментами, после восстановления состояния
Lifecycle
NavBackStackEntry
неDESTROYED
приDESTROYED
его фрагмента. ( B/270610768 )
Версия 2.6.0-альфа05
8 февраля 2023 г.
androidx.navigation:navigation-*:2.6.0-alpha05
выпускается. Версия 2.6.0-alpha05 содержит эти коммиты.
Новые возможности
-
NavController.popBackStack(route)
,NavController.getBackStackEntry(route)
NavController.clearBackStack(route)
( IEBD28 , IC678C , I3B37B , B/257514373 ) -
FragmentNavigator
теперь использует API -интерфейсы перехода при навигации и выпчавеNavBackStackEntries
. Это означает, чтоLifecycle
NavBackStackEntry
теперь будет ждать, пока вступление и выйдет на фрагментные спецэффекты, прежде чем перемещать свой последнийLifecycle.State
. ( I3cb19 , b/238686802 ) -
DialogFragmentNavigator
теперь использует API -интерфейсы перехода при навигации и всплескеNavBackStackEntries
. Это означает, чтоLifecycle
NavBackStackEntry
теперь будет ждать, покаLifecycle
DialogFragment
перейти кDESTROYED
прежде чем переехать, чтобыDESTROYED
себя. ( I53ee5 , b/261213893 )
Изменения API
-
NavigatorState
теперь предоставляет APIprepareForTransition
, позволяющийNavigator
S перемещатьNavBackStackEntries
в промежуточныйLifecycle.State
. ( I42c21 , b/238686802 ) - Теперь вы можете получить доступ к задней части, связанного с
NavGraphNavigator
илиComposeNavigator
через свойствоbackstack
.ComposeNavigator
также теперь выявляет обратный вызовonTransitionComplete()
чтобы отметитьNavBackStackEntry
, который выполнил операцию навигации илиpopBackStack
как завершенное. ( I02062 , i718db , b/257519195 )
Исправления ошибок
- Навигатор теперь не будет op при использовании API
push/popWithTransition
, и запись уже обрабатывается. ( IADBFA , B/261213893 ) - При использовании
launchSingleTop
с вложеннымNavGraph
все направления, начиная с оригинального назначения до егоstartDestination
будут только должным образом добавлены в верхнюю часть задней части. ( Id4bea , b/253256629 ) - Навигация теперь должным образом заменит экземпляр
DialogFragment
при навигации в тот же пункт назначения, когда флагlaunchSingleTop
установлен на True. ( I45b5a , b/149572817 ) - Навигационные Safeargs больше не будут вызывать ошибку компиляции при использовании аргументов, которые стоят ровно 19 символов. ( ID60BC , B/257110095 )
Версия 2.6.0-альфа04
9 ноября 2022 г.
androidx.navigation:navigation-*:2.6.0-alpha04
выпускается. Версия 2.6.0-alpha04 содержит эти коммиты.
Новые возможности
- Пользовательские подклассы
NavType
теперь могут переопределятьserializeAsValue
, чтобы сериализовать значение в строку, позволяя как сериализацию, так и десериализацию (черезparseValue
) полностью инкапсулировать в классNavType
.StringType
теперь переопределяет этот метод, чтобы вызватьUri.encode
на даннойString
. ( IE5213 , B/247637434 ) -
NavigationUI
теперь предоставляет журналы, когда не может навигации по выбраннойMenuItem
. ( I2af5a , b/247730357 )
Исправления ошибок
- Глубокие ссылки навигации теперь лениво проанализируются вместо инициализации графика, которая может повысить производительность приложений при запуске. ( Iab0ab )
- Фиксированный сбой, вызванный навигацией после глубокой связи с пунктом назначения с нулевыми аргументами по умолчанию. ( I51c24 , b/243183636 )
Обновление зависимости
- Поддержка Navigation для динамических функциональных модулей теперь зависит от библиотеки доставки гранулированных игр. ( IB4DDC )
- Safe ARG навигации теперь зависит от плагина Android Gradle Версия 7.3.0. Это означает, что теперь он совместим только с версиями 7.3.0+. ( I47e49 )
Версия 2.6.0-Alpha03
24 октября 2022 г.
androidx.navigation:navigation-*:2.6.0-alpha03
выпускается. Версия 2.6.0-Alpha03 содержит эти коммиты.
Исправления ошибок
- Из навигации
2.5.3
:NavHost
больше не будет вызыватьNoSuchElementException
, когда не будет установлено место для сочиненияCrossfade
. Теперь он просто пропустит композицию. ( IEB46E , B/253299416 ) - Из навигации
2.5.3
: Исправлена проблема, в которой сохраненное состояние составного состава (например, использованиеrememberSaveable
) не было забыто и удалялось, когда пункт назначения выскочил из заднего стека. ( I64949 )
Обновления зависимостей
- Навигация теперь зависит от фрагмента
1.5.4
. ( ICD424 )
Версия 2.6.0-Alpha02
5 октября 2022 г.
androidx.navigation:navigation-*:2.6.0-alpha02
выпускается. Версия 2.6.0-Alpha02 содержит эти коммиты.
Изменения поведения
- При передаче идентификатора навигационного графика в
AppBarConfiguration
(например, черезMenu
),NavigationUI
теперь рассматривает только начальное место назначения этого навигационного графа как пункт назначения верхнего уровня, а не неправильно отмечает каждое место назначения в графике как пункт назначения верхнего уровня. Поведение прохождения идентификатора отдельного назначения не изменилось. Эта же функциональность доступна для вашего собственного кода через новую функциюisTopLevelDestination
вAppBarConfiguration
. ( IE936E , B/238496771 )
Исправления ошибок
-
navigation:navigation-fragment
теперь зависит от фрагмента версии1.5.2
. ( I00ba4 ) - Выбранный элемент меню больше не будет обновляться при перемещении до пункта назначения
FloatingWindow
, таким как диалог. ( I4cde8 , b/240308330 )
Версия 2.6.0-Alpha01
7 сентября 2022 г.
androidx.navigation:navigation-*:2.6.0-alpha01
выпускается. Версия 2.6.0-Alpha01 содержит эти коммиты.
Новые возможности
- Интеграции
setupWithNavController
вNavigationUI
для работы с Top Bar Bar теперь будут анализировать значенияR.string
для аргументовReferenceType
, найденных в вашемandroid:label
в их строковые значения вместо того, чтобы выводить целое число ресурсов, сгенерированное автоматическим ресурсом. ( I5f803 , b/167959935 ) -
NavDeepLink
теперь поддерживает значения по умолчанию для массивов, что позволяет поддержать повторные параметры запроса, которые будут отображаться в типе массива аргумента.NavType
также теперь включает метод по умолчанию, который можно переопределить, чтобы объединить два проанализированных значения. ( ID68C3 , B/209977108 ) - При использовании точной строки
${applicationId}
в качестве заполнителя вapp:data
иapp:dataPattern
в элементе деятельности файла навигации XML -файла, заполнитель будет автоматически заполнен с помощьюpackageName
контекста при инфляции. ( Iaabde , b/234223561 ) - Попытка создать пустой
NavDeepLink
с использованием DSLnavDeepLink
Kotlin, теперь приведет к тому, что предупреждение о ворсе, указывающее на то, что глубокая ссылка нуждается в URI, действие и/или миметипе, чтобы быть действительным. ( I08D2F , B/154038883 )
Изменения API
- Добавлена новая функция расширения
NavDestination
, чтобы проанализировать динамические метки с аргументами в формеandroid:label="{arg}"
в строку. Поддерживает аргументыReferenceType
, анализируя значенияR.string
в их строковые значения. ( I07D89 , B/236269380 )
Изменения поведения
-
arguments
Navbackstackentry иarguments
, переданные вOnDestinationChangedListener
теперь являются лишь копией неизменных аргументов, которые были созданы, когда вы перемещались в пункт назначения. Это означает, что любые изменения, внесенные в эти пучки, не будут отражены в последующих доступах кarguments
или другим экземплярамOnDestinationChangedListener
. ( I676f5 )
Исправления ошибок
- Из навигации
2.5.2
: динамическая навигация теперь правильно пытается установить направления деятельности из других модулей, прежде чем навигация на них. ( IA2C16 , B/240292838 ) - От навигации
2.5.2
: навигация теперь должным образом заменит экземпляр фрагмента при навигации по одному и тому же пункту назначения и установлению флагаlaunchSingleTop
в True. ( I5a2f1 , b/237374580 ) - От навигации
2.5.2
: ФиксированноеIllegalStateException
вызванное навигацией до двойного вложенного графика, который делит родителя с новым пусковым пусковым направлением. ( I9f7cb , b/243778589 )
Версия 2.5
Версия 2.5.3
24 октября 2022 г.
androidx.navigation:navigation-*:2.5.3
выпущена. Версия 2.5.3 содержит эти коммиты.
Исправления ошибок
-
NavHost
больше не вызоветNoSuchElementException
, когда нет места назначения для сочиненияCrossfade
. Теперь он просто пропустит композицию. ( IEB46E , B/253299416 ) - Исправлена проблема, в которой сохраненное состояние композиции (например, использование воспоминаний о
rememberSaveable
) не было забыто и удалялось, когда пункт назначения был выскочен из заднего стека. ( I64949 )
Версия 2.5.2
7 сентября 2022 г.
androidx.navigation:navigation-*:2.5.2
выпущена. Версия 2.5.2 содержит эти коммиты.
Исправления ошибок
- Динамическая навигация теперь должным образом пытается установить направления деятельности из других модулей, прежде чем навигация на них. ( IA2C16 , B/240292838 )
- Навигация теперь должным образом заменит экземпляр фрагмента при навигации по одному и тому же пункту назначения и установлению флага
launchSingleTop
в True. ( I5a2f1 , b/237374580 ) - Исправлено
IllegalStateException
вызванное навигацией на двойной вложенное график, в котором родится родитель с новым пунктом назначения старта. ( I9f7cb , b/243778589 )
Обновление зависимости
- Навигация
2.5.2
теперь зависит от фрагмента1.5.2
. ( AOSP/2178734 )
Версия 2.5.1
27 июля 2022 г.
androidx.navigation:navigation-*:2.5.1
выпускается. Версия 2.5.1 содержит эти коммиты.
Исправления ошибок
-
Navigation Safe Args
больше не будут вызывать предупреждения об испаке в сгенерированных классах при использовании пользовательских типов аргументов, которые сохраняются вBundle
. ( Id86ed , b/237725966 )
Обновления зависимостей
- Навигационная библиотека теперь зависит от жизненного цикла
2.5.1
. ( IB4451 ) - Навигационная библиотека теперь зависит от деятельности
1.5.1
. ( I3efe8 ) - Навигационная библиотека теперь зависит от фрагмента
1.5.1
. ( I56177 )
Версия 2.5.0
29 июня 2022 г.
androidx.navigation:navigation-*:2.5.0
выпускается. Версия 2.5.0 содержит эти коммиты.
Важные изменения с 2.4.0
- CreationExtras Integration -
Navigation
теперь имеет возможность обеспечить бездействиеViewModelProvider.Factory
через LifeCycle2.5.0
'CreationExtras
.
Навигация Safeargs
-
Navigation Safe Args
повысил зависимостьAndroid Gradle Plugin
, чтобы полагаться на7.0.4
, снизив совместимость для версий AGP до7.0
. - Добавлена поддержка для использования атрибута пространства имен.
Другие изменения
- API
visibleEntries
больше не является экспериментальным и обеспечивает функцию для извлечения всех записей, пункт назначения которого в настоящее время видны в соответствии сNavController
.
Версия 2.5.0-RC02
15 июня 2022 года
androidx.navigation:navigation-*:2.5.0-rc02
выпущен. Версия 2.5.0-RC02 содержит эти коммиты.
Исправления ошибок
- Исправлена авария, вызванное быстрым переключением между нижними направлениями при использовании навигационного составления
NavHost
. ( I3979A , B/234054916 ) -
Navigation SafeArgs
больше не будут сбой при использованииapplicationIdSuffix
и пространства имен, либо безapplicationId
, либо при различенииapplicationId
и пространства имен. ( I754b1 , b/233119646 ) -
NavArgument
теперь имеет пользовательскую функциюtoString()
чтобы показать внутренние значения аргумента. ( I900a8 )
Версия 2.5.0-RC01
11 мая 2022 г.
androidx.navigation:navigation-*:2.5.0-rc01
выпущен. Версия 2.5.0-RC01 содержит эти коммиты.
Новые возможности
- Добавлено новое правило Lint, чтобы предупредить от размещения элементов
<deeplink>
внутри<activity>
Elements в вашем файлеnavigation.xml
. ( IC15A5 , B/178403185 )
Исправления ошибок
- Компонируемые прицелы в
NavHost
иDialogHost
в настоящее время расположены в ожидаемом порядке, то есть внутренние композиции расположены перед внешними композищиками. ( I157e6 ) - Навигационная Safeargs теперь использует
PathSensitivity.RELATIVE
вArgumentsGenerationTask
для обеспечения перемещения кэша. Это означает, что вход в кеш теперь можно повторно использовать от сборки CI до локальной сборки. ( I5f67c , b/173420454 ) - Правило Lint
UnrememberedGetBackStackEntryDetector
Lint было обновлено, чтобы гарантировать, что призывremember
окружающий вызовgetBackStackEntry()
также проходит в объектеNavBackStackEntry
в качестве ключа. ( IB7081 , B/227382831 )
Версия 2.5.0-бета01
20 апреля 2022 года
androidx.navigation:navigation-*:2.5.0-beta01
выпускается. Версия 2.5.0-бета01 содержит эти коммиты.
Исправления ошибок
-
DialogNavigator
теперь используетpopWithTransition
при выполнении вызоваdismiss()
. Это исправляет условие гонки при использованииViewModel
вdialog
пункте, которое вызоветIllegalStateException
при отклонении диалога, либо используя систему назад, либо постукивая за пределы диалога для выхода. ( ID7376 , B/2265552301 )
Обновления зависимостей
- Навигация теперь зависит от жизненного цикла
2.5.0-beta01
, исправляяIllegalStateException
при гнездовании одногоNavHost
в другойNavHost
на непредровой вкладке нижней навигации при использовании нескольких задних стеков.
Версия 2.5.0-Alpha04
6 апреля 2022 г.
androidx.navigation:navigation-*:2.5.0-alpha04
. Версия 2.5.0-Alpha04 содержит эти коммиты.
Изменения API
-
visibleEntries
больше не экспериментально. ( I4829f , b/225394514 )
Исправления ошибок
- Navhost теперь зависит от
visibleEntries
отNavController
чтобы определить, какие записи сочиняют. Это означает, что при использовании вложенного Navhost внутреннийNavHost
теперь должен должным образом оживить. ( I4ba2b , b/225394514 ) -
visibleEntries
StateFlow
предоставленнаяNavController
теперь основана на состоянии Max Lifecycle, а не в текущем состоянии жизненного цикла. Это означает, что даже если жизненный цикл хостаnavController
не будет начат, список видимых Entires останется прежним. ( I9e2a8 , b/225394514 ) -
SavedStateViewFactory
теперь поддерживает использованиеCreationExtras
, даже если он был инициализирован с помощьюSavedStateRegistryOwner
. Если предоставляются дополнения, инициализированные аргументы игнорируются. ( I6c43b , b/224844583 ) -
NavDeepLink
теперь может анализировать URIS с одним параметром запроса без значения. ( I0efe8 , b/148905489 ) - Пустая строка теперь считается действительными аргументами в глубоких ссылках. ( I70a0d , b/217399862 )
-
Navigation Safe Args
больше не будут сбоями при использовании пространств имен, аAndroidManifest.xml
не присутствует. ( I17CCF , B/227229815 )
Версия 2.5.0-Alpha03
23 февраля 2022 г.
androidx.navigation:navigation-*:2.5.0-alpha03
выпускается. Версия 2.5.0-Alpha03 содержит эти коммиты.
Изменения API
- Теперь вы можете пройти в
CreationExtras
by navGraphViewModels
чтобы создатьViewModel
. ( I29217 , B/217618359 )
Исправления ошибок
-
NavDeepLinks
теперь правильно поддерживает закодированные новые линейные символы, встроенные в маршруты/Deep Link URI. ( I513d1 , b/217815060 ) -
CreationExtras
теперь будет работать правильно при использовании сNavBackStackEntries
для создания ViewModels. ( I69161 , B/217617710 ) - Safe ARG навигации теперь поддерживает использование пространства имен, определенных в
build.gradle
вместо пакета в AndroidManifest. ( I659EF , B/217414933 )
Версия 2.5.0-Alpha02
9 февраля 2022 года
androidx.navigation:navigation-*:2.5.0-alpha02
выпускается. Версия 2.5.0-Alpha02 содержит эти коммиты.
Исправления ошибок
- Из навигации
2.4.1
:NavHostFragment
теперь правильно установитOnBackPressedDispatcher
при использовании подключения для просмотра с вложенными графиками. ( IFBB51 , B/214577959 ) - Из навигации
2.4.1
: Когда глубокое связывание через несколько вложенныхNavGraph
S, задний стек теперь будет должным образом включать в себя промежуточные начальные направления. ( I504C0 , B/214383060 )
Версия 2.5.0-Alpha01
26 января 2022 г.
androidx.navigation:navigation-*:2.5.0-alpha01
выпускается. Версия 2.5.0-Alpha01 содержит эти коммиты.
Новые возможности
-
NavBackStackEntry
теперь интегрируется с ViewModel CreationExtras, представленным как часть жизненного цикла2.5.0-alpha01
. ( IB9FE2 , B/207012490 )
Исправления ошибок
- Исправлена проблема, в которой доступ к
ViewModel
, созданную черезby navGraphViewModels()
из фрагментаonCreate()
потерпит неудачу сIllegalStateException
. ( I8a14d ) -
NavDeepLink
S больше не будет излишне декодировать ARGS дважды, что означает, что надлежащие ARG теперь передаются в ваш конечный пункт назначения. ( I31b0a , b/210711399 )
Безопасные аргии
- Безопасные ARG теперь зависят от Android Gradle Plugin версии 7.0.4. Это означает, что навигационные безопасные ARG больше не будут совместимы с версиями Android Studio до 7.0, но теперь совместим с плагином Android Gradle 7.1.0 и выше. ( I41c88 , b/213086135 , b/207670704 )
Версия 2.4.2
Версия 2.4.2
6 апреля 2022 г.
androidx.navigation:navigation-*:2.4.2
выпущена. Версия 2.4.2 содержит эти коммиты.
Исправления ошибок
- Перекурированный из навигации
2.5.0-alpha03
:NavDeepLinks
теперь правильно поддерживают закодированные новые линейные символы, встроенные в маршруты/Uris Deep Link. ( I513d1 , b/217815060 ) - Перекурированный из навигации
2.5.0-alpha03
: Navigation Safeargs теперь поддерживает использование пространства имен, определенных вbuild.gradle
вместо пакета в AndroidManifest. ( I659EF , B/217414933 ) - Перекурированный из навигации
2.5.0-alpha04
:Navigation Safe Args
больше не будет сбои при использовании пространств имен, аAndroidManifest.xml
не присутствует. ( I17CCF , B/227229815 ) - Перекурируется из навигации
2.5.0-alpha04
: пустая строка теперь считается действительными аргументами в глубоких ссылках. ( I70a0d , b/217399862 )
Версия 2.4.1
Версия 2.4.1
9 февраля 2022 года
androidx.navigation:navigation-*:2.4.1
выпускается. Версия 2.4.1 содержит эти коммиты.
Исправления ошибок
-
NavHostFragment
теперь правильно установитOnBackPressedDispatcher
при использовании подключения к вложенным графам. ( IFBB51 , B/214577959 ) - Когда глубокое связывание через несколько вложенных
NavGraph
S, задний стек теперь будет правильно включать в себя промежуточные начальные направления. ( I504C0 , B/214383060 ) - Перекурированный из навигации
2.5.0-alpha01
: Исправлена проблема, в которой доступ к ViewModel, созданную черезby navGraphViewModels()
из фрагментаonCreate()
будет провалиться сIllegalStateException
. ( I8a14d ) - Перекурированный из навигации
2.5.0-alpha01
:NavDeepLink
S больше не излишне декодирует ARGS, что означает, что правильно декодированные ARG теперь передаются в ваш конечный пункт назначения. ( I31b0a , b/210711399 ) - Перекурируется из навигации
2.5.0-alpha01
: безопасные ARG теперь зависит от Android Gradle Plugin Версия 7.0.4. Это означает, что навигационные безопасные ARG больше не будут совместимы с версиями Android Studio до 7.0, но теперь совместим с плагином Android Gradle 7.1.0 и выше. ( I41c88 , b/213086135 , b/207670704 )
Версия 2.4.0
Версия 2.4.0
26 января 2022 г.
androidx.navigation:navigation-*:2.4.0
выпускается. Версия 2.4.0 содержит эти коммиты.
Важные изменения с 2.3.0
- Все навигационные артефакты были переписаны в Котлине. Это улучшило нулясь классов с использованием дженериков (таких как подклассы
NavType
). Все функции расширения Kotlin, которые раньше были частью артефактов-ktx
, были перемещены в соответствующие основные артефакты. Артефакты-ktx
будут продолжать публиковать, но они полностью пусты. - Артефакт
navigation-fragment
в настоящее время содержит предварительную реализацию двухстороннего макета через новыйAbstractListDetailFragment
. Этот фрагмент используетSlidingPaneLayout
для управления панелью списков (которую предоставляет ваш подкласс) и панели детальной панели, которая используетNavHostFragment
в качестве реализации, как видно в нашей реализации . - Метод
currentBackStackEntryAsFlow()
наNavController
обеспечиваетFlow
, который излучает всякий раз, когда текущийNavBackStackEntry
меняется. Этот поток может быть использован в качестве альтернативы ручным управлениюOnDestinationChangedListener
. - NavController теперь предлагает возможность получить список всех видимых экземпляров
NavBackStackEntry
в качествеStateFlow
через экспериментальную свойствоvisibleEntries
. - Теперь можно расширить класс
NavType
для создания пользовательских навигаций. Пользовательские типы поддерживаются только при программном построении навигационного графа, например, через навигационный график Kotlin DSL . Навигация теперь предоставляет APIS
findStartDestination()
иgetHierarchy()
которые можно использовать для реализации пользовательской навигации.findStartDestination()
- это функция расширения наNavGraph
, которая найдет фактическое начало места, которое будет отображаться при перемещении на график, даже еслиstartDestination
сама по себе является вложеннымNavGraph
.getHierarchy()
- это функция наNavDestination
, которую можно использовать для проверки, находится ли данное место в иерархии другого.val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
Методы
NavigationUI
, которые принялиBottomNavigationView
были обновлены, чтобы вместо этого воспринимать свой суперкласс, введенный в Material1.4.0
,NavigationBarView
. Это позволяет использовать эти методы сNavigationRailView
.При накапливании элемента
<action>
через XML атрибуты анимации могут использовать атрибуты, полученные из вашей темы, используя синтаксисapp:enterAnim="?attr/transitionEnter"
.Safe Args теперь генерирует метод
fromSavedStateHandle()
для каждого классаNavArgs
. ( #122 , b/136967621 )class HomeViewModel(savedStateHandle: SavedStateHandle) : ViewModel() { // Create a HomeDestinationArgs class with type safe accessors for each argument // defined on your destination private val args = HomeDestinationArgs.fromSavedStateHandle(savedStateHandle) }
Навигационные маршруты и DSL Kotlin
Предыдущие версии навигации полагались на каждое место назначения, имеющего постоянный цельный идентификатор, который будет однозначно идентифицировать его из своих мест для братьев и сестер и позволил вам navigate()
в этот пункт назначения либо непосредственно, либо через действие. Несмотря на то, что это продолжает быть действительным и полезным, особенно в тех случаях, когда вы определяете свой навигационный график в XML и можете использовать автоматические константы R.id
или безопасные ARG (которые используют эти константы для создания кода во время сборки), эта система Уникальные целые числа не отражали семантическое значение и выразительность, необходимые для поддержки полностью динамических графиков, созданных программно во время выполнения через навигационную DSL Kotlin .
Этот релиз представляет новую опцию для уникального идентификации пункта назначения на навигационном графике по его маршруту . Маршрут - это String
, которая определяет уникальный путь к пункту назначения. Все методы Kotlin DSL, которые приняли идентификатор назначения, теперь устарели и заменяются эквивалентным API, который выходит по маршруту.
Каждый маршрут следует рассматривать как «путь» часть Uri
, который определяет этот пункт назначения, например, home
, profile/{userId}
, profile/{userId}/friends
и т. Д. Когда идентичность назначения связана с конкретным Часть контента, эти динамические аргументы должны быть частью маршрута, следуя тем же правилам, что и неявные глубокие ссылки .
Все API -интерфейсы NavController
, которые раньше принимали только идентификатор, теперь имеют перегрузку, которая принимает String
маршрута. Это включает в себя navigate()
, popBackStack()
, popUpTo()
и getBackStackEntry()
.
Это имело некоторые последствия API:
- Собственность
popUpTo
Kotlin на DSL Kotlin установилась в пользуpopUpToId
. - API
getStartDestination()
был устарел в пользуgetStartDestinationId()
.
В отличие от навигации по идентификатору, навигация по маршруту следует те же правила, что и неявные глубокие ссылки в том, что вы можете напрямую перейти к любому пункту назначения на любом вложенном графике, гарантируя, что эти маршруты можно использовать в многомодульных проектах, не добавляя внешнюю глубокую связь к каждому пункту назначения.
Навигация составьте
Артефакт navigation-compose
обеспечивает интеграцию между навигационным компонентом и JetPack Compose . Он использует @Composable
функции в качестве пунктов назначения в вашем приложении.
Этот релиз предоставляет:
- Компонируемый
NavHost
, который позволяет вам построить свой навигационный график через DSL Kotlin, используяcomposable
иdialog
направления, а также поддержку дополнительных навигаторов, таких как из аккомпанистского навигационного материала . - Обязательная поддержка для перекрестного фонда между направлениями. Анимация навигации по навигации может использоваться для управления переходами ввода и выхода с использованием экспериментальных API -интерфейсов.
- Обзор
Lifecycle
до каждого композиционного пункта назначения. Каждое место назначения достигаетRESUMED
состояния только после того, как все въездные переходы заканчиваются и немедленно падают, чтобыSTARTED
, когда начинаются любые переходы, что позволяет вам избежать всех проблемIllegalStateException
и мульти-нажатым, запуская вызовnavigate
только приRESUMED
Lifecycle
. - Обрезка
ViewModel
(через APIviewModel()
IPI LifeCycle ViewModel Compose2.4.0
илиhiltViewModel()
навигационной навигации Compose1.0.0
на уровне назначения, обеспечивая область, которая переживает изменения конфигурации и находится на заднем стеке (когда ваш составной Содержание в противном случае утилизируется) и сигнал вonCleared()
, который указывает на постоянную утилизацию и очистку состояния, связанного с этимNavBackStackEntry
. - Оценка
rememberSaveable
о состоянии на уровне назначения, гарантируя, что все композиционное состояние сохраняется и восстанавливается автоматически, когда вы возвращаетесь в пункт назначения. - Полная поддержка для сохранения и восстановления состояния
NavController
и состояния его назначения после процесса смерти и отдыха. - Автоматическая интеграция с кнопкой System Back.
Поддержка передачи аргументов, прикрепление глубоких связей к направлениям и возврат результатов к предыдущим направлениям.
Составьте конкретных помощников в
rememberNavController()
иcurrentBackStackEntryAsState()
чтобы разрешить состояние подъема и соединениеNavController
с композициями за пределамиNavHost
(например, нижняя навигационная панель).
val navController = rememberNavController()
Scaffold { innerPadding ->
NavHost(navController, "home", Modifier.padding(innerPadding)) {
composable("home") {
// This content fills the area provided to the NavHost
HomeScreen()
}
dialog("detail_dialog") {
// This content will be automatically added to a Dialog() composable
// and appear above the HomeScreen or other composable destinations
DetailDialogContent()
}
}
}
См. Руководство по навигации Compose для получения дополнительной информации.
Несколько обратных стеков
NavController отвечает за управление задней стопкой направлений, добавление направлений в задний стек при navigate()
к ним и удалению их при вызове popBackStack()
или запускает кнопку «Система». Существующий класс NavOptions
и интеграция в элементы <action>
на навигационном графике XML были расширены для поддержки сохранения и восстановления заднего стека.
В рамках этого изменения методы NavigationUI
onNavDestinationSelected()
, BottomNavigationView.setupWithNavController()
и NavigationView.setupWithNavController()
теперь автоматически сохраняют и восстанавливают состояние поставленных направлений, что обеспечивает поддержку множества спинков без каких -либо изменений кода. При использовании навигации с фрагментами это рекомендуемый способ интеграции с несколькими спинами.
Основные API для сохранения и восстановления состояния выставлены через несколько поверхностей:
In Navigation XML, the
<action>
element can now use the boolean attributes ofapp:popUpToSaveState
andapp:restoreState
to save the state of any destinations popped viaapp:popUpTo
and restore the state associated with the destination passed as theapp:destination
:<action android:id=”@+id/swap_stack” app:destination=”@id/second_stack” app:restoreState=”true” app:popUpTo=”@id/first_stack_start_destination” app:popUpToSaveState=”true” />
В
navOptions
Kotlin DSL вы можете добавить логическую собственностьrestoreState
иsaveState
логического свойства наpopUpTo
застройщике :// Use the navigate() method that takes a navOptions DSL Builder navController.navigate(selectedBottomNavRoute) { launchSingleTop = true restoreState = true popUpTo(navController.graph.findStartDestination().id) { saveState = true } }
При вручную создавать объект
NavOptions
черезNavOptions.Builder
, вы можете использоватьsetRestoreState()
и новую перегрузку вsetPopUpTo()
, который принимает дополнительный параметрsaveState
.NavOptions navOptions = new NavOptions.Builder() .setLaunchSingleTop(true) .setRestoreState(true) .setPopUpTo(NavGraph.findStartDestination(navController.getGraph()).getId(), false, // inclusive true) // saveState .build(); navController.navigate(selectedBottomNavId, null, navOptions);
Программные вызовы в
popBackStack()
теперь могут включать дополнительный параметрsaveState
.Вы можете использовать метод
clearBackStack()
, чтобы очистить любое состояние, которое было сохранено с помощьюpopBackStack()
илиpopUpToSaveState
.
Во всех случаях NavController
сохранит и восстановит состояние каждого NavBackStackEntry
, включая любые экземпляры ViewModel
. API -интерфейсы Navigator
были обновлены, чтобы позволить каждому Navigator
поддержать сохранение и восстановление собственного состояния.
Поведение изменяется
-
NavDeepLinkBuilder
теперь добавляетPendingIntent.FLAG_IMMUTABLE
вPendingIntent
возвращаемыйcreatePendingIntent()
, гарантируя, что этот API работает, как и ожидалось при нацеливании на Android 12. - Навигация теперь зависит от жизненного цикла
2.3.1
и теперь MarkssetGraph()
,popBackStack()
,navigateUp()
иnavigate()
, методы, которые обновляютLifecycle
NavBackStackEntry
, как@MainThread
, выровняя навигацию с основным принудительным органом.2.3.0
. - Глубокие ссылки теперь подтверждают, что все необходимые аргументы (без значений по умолчанию) присутствуют в
Uri
. - Аргументы
NavDeepLink
Parsed теперь рассматривают знаки фунта так же, как и вопросы вопроса, как разделитель между сегментами пути, предотвращая аргумент в отношении знака фунта. - При генерации действий код котлина, сгенерированный из Safe ARG, теперь ставит аргументы без значений по умолчанию, прежде чем они имеют значения по умолчанию в качестве параметров.
- При генерации аргументов безопасные ARG теперь ставят параметры без значений по умолчанию в значениях по умолчанию.
- Safe-Args теперь зависит от плагина Android Gradle 4.2.0. Это означает, что вы больше не должны получать предупреждение об использовании
applicationIdTextResource
.
Известные проблемы
- Исправлено в навигации
2.5.0-alpha01
: доступ кViewModel
, созданную черезby navGraphViewModels()
из фрагментаonCreate()
потерпит неудачу сIllegalStateException
. ( B/213504272 ) - Исправлено в навигации
2.5.0-alpha01
: Safe Args 2.4.0 несовместим с плагином Android Gradle 7.1.0 и выше. ( B/213086135 ) - Глубокое связывание с несколькими вложенными графиками NAV не правильно создает полный обратный удар. ( B/214383060 )
Версия 2.4.0-RC01
15 декабря 2021 г.
androidx.navigation:navigation-*:2.4.0-rc01
выпускается. Версия 2.4.0-RC01 содержит эти коммиты.
Поведение изменяется
- Аргументы
NavDeepLink
разбираемые в Аргументах, теперь рассматривают знаки фунта так же, как и вопросы вопроса как сепаратор между аргументами. ( I21309 , B/180042703 )
Исправления ошибок
- Deeplinks больше не будет игнорировать аргументы со значениями, которые совпадают с именем заполнителя. ( If8017 , b/207389470 )
-
NavController
больше не будет терпеть крушение при выпуске вложенного пункта назначения, используя переходы после восстановленияNavController
. ( I0F7C9 , B/205021623 ) - Сообщение об ошибке при использовании недопустимого
startDestination
теперь будет по умолчанию маршрута начального назначения, если он будет доступен. ( I86B9D , B/208041894 )
Навигация сочиняйте исправления ошибок
- Фиксированный потенциальный сбой, вызванный быстрым переключением между начальным пунктом назначения и другим пунктом назначения с использованием элементов меню нижних навигаций. ( IC8976 , B/208887901 )
- Диалоговое направление теперь правильно восстановлено поверх экрана после изменений конфигурации или смерти процесса. ( I4c0dc , b/207386169 )
- Исправлена проблема, в которой попытка получить
ViewModel
из диалоговогоNavBackStackEntry
потерпит неудачу, когда диалог был уволен. ( I6b96d , b/206465487 ) - Исправлена проблема при использовании направлений
activity
сNavHost
навигационным навигацией, что приведет к бесконечному переобожению. ( I8f64c ) - Исправлена утечка в навигационной композиции, где она держалась на ссылке старого действия после изменения конфигурации или смерти процесса. ( I4efcb , b/204905432 )
Безопасные исправления ошибок ARGS
-
SafeArgs
больше не сбои при попытке восстановить специальные выборочные массивы после смерти процесса. ( I618E8 , B/207315994 ) - Исправлена ошибка в безопасных аргументах, которая не позволила бы логическим массивам иметь
null
значение. ( I8C396 , B/174787525 )
Версия 2.4.0-бета02
3 ноября 2021 г.
androidx.navigation:navigation-*:2.4.0-beta02
выпускается. Версия 2.4.0-бета02 содержит эти коммиты.
Изменения API
- Обработка как явных, так и неявных глубоких ссылок теперь автоматически добавляет флаг
saveState
при навигации на другой график, обеспечивая, чтобы код, такой какNavigationUI.setupWithNavController
и код, используя несколько спинных стеков, как и ожидалось. ( IC8807 )
Изменения поведения
- Глубокие узоры ссылки теперь лениво скомпилируются в Navdeeplink, а не во время инфляции. Это должно улучшить время инфляции навигационных графиков, которые включают глубокие ссылки. ( B8D257 , B/184149935 )
Исправления ошибок
- Исправлена проблема
setContent()
в которой NAVBACKSTACKENTRIES отталкивался вLifecycle.State.CREATED
после перехода наNavHost
Lifecycle.State.STARTED
. ( IA5AC1 , B/203536683 ) - Исправлено условие гонки, в котором выпадение направления
DialogFragment
из обратного стека до того, как диалог фактически не был показан, на самом деле не отклоняет диалог, что привело к сбою, когда пользователь был уволен вручную уволен вручную. ( I687e5 ) - Исправлена проблема, в которой API
onNavDestinationSelected
наNavigationUI
вернетtrue
даже если вы на самом деле неnavigate()
к этому навигационному графику. Теперь он использует ту же логику, что и внутри, с помощьюsetupWithNavController
чтобы выбрать толькоMenuItem
связанный с текущим пунктом назначения, используяhierarchy
пункта назначения. ( I2b053 )
Версия 2.4.0-бета01
27 октября 2021 г.
androidx.navigation:navigation-*:2.4.0-beta01
выпускается. Версия 2.4.0-бета01 содержит эти коммиты.
Новые возможности
- Теперь вы можете использовать
by navGraphViewModel
с маршрутом в качестве альтернативы использованию идентификатора, чтобы лучше поддержать навигационную DSL с фрагментами. ( I901e3 , b/201446416 )
Изменения API
- API
visibleEntries
в настоящее время экспериментально. ( I93f6f )
Исправления ошибок
- ViewModels больше не будет разрушаться, когда переходы будут прерваны путем навигации между теми же экранами ( ID52D8 , B/200817333 )
- Нулевые аргументы
NavDeepLink
больше не требуют значения по умолчанию при добавлении глубоких ссылок наNavDestination
S. ( I5aad4 , b/201320030 ) - NAVBACKSTACKENTRIES Сейчас с разными жизненными циклами больше не считаются равными. Это означает, что Navhost должным образом пересматривает все направления при выполнении навигации с Singletop и при выборе нижних меню. ( I1B351 , B/1969997433 )
- Fixed an issue with
AbstractListDetailFragment
that caused thelayout_width
andlayout_weight
attributes on the list pane returned byonCreateListPaneView()
to be incorrectly handled or ignored. ( f5fbf3 ) - The visual state of dialog destinations now correctly stays in sync with the
DialogFragmentNavigator
's state. This means that manually calling the asynchronousdismiss()
API forDialogFragment
now properly clears all dialog destinations above the now dismissed dialog. This does not affect cases where you usepopUpTo
orpopBackStack()
to dismiss your dialog. ( I77ba2 ) -
AbstractAppBarOnDestinationChangedListener
now has clearer error messaging foronDestinationChanged()
. ( Ie742d )
Version 2.4.0-alpha10
29 сентября 2021 г.
androidx.navigation:navigation-*:2.4.0-alpha10
is released. Version 2.4.0-alpha10 contains these commits.
Новые возможности
- NavController now offers the ability to retrieve a list of all visible
NavBackStackEntry
instances via thevisibleEntries
StateFlow ( Ia964e ) -
rememberNavController()
now takes a optional set ofNavigator
instances that will be added to the returnedNavController
to better support optional Navigators such as those from Accompanist Navigation Material . ( I4619e )
Исправления ошибок
- Dynamic Navigation will no longer crash when the Activity is recreated. ( Ifa6a3 , b/197942869 )
- Fixed an issue with the system back button that occurs only after popping back to a composable destination that contains a
NavHost
. ( 3ed148 , b/195668143 ) - SafeArgs now generates the arguments for
fromBundle()
andfromSavedStateHandle()
in the proper parameter order. ( I824a8 , b/200059831 )
Version 2.4.0-alpha09
15 сентября 2021 г.
androidx.navigation:navigation-*:2.4.0-alpha09
is released. Version 2.4.0-alpha09 contains these commits.
Новые возможности
- You can now use the
clearBackStack()
method to clear any state that was saved withpopBackStack()
orpopUpToSaveState
. ( I80a0f ) - You can now pass in a list of arguments and/or deep links to your nested navigation graph's builder and they will automatically be added to the resulting graph. ( I8a470 , b/182545357 )
Изменения API
- The
navArgument
Kotlin DSL function is now part ofnavigation-common
instead ofnavigation-compose
. This will require updating imports to continue to use this function. ( I1d095 )
Изменения поведения
- When generating arguments, Safe Args now puts parameters without default values before those with default values. ( I89709 , b/198493585 )
Исправления ошибок
- When using Navigation Compose, NavGraphs will only be
DESTROYED
once all their children areDESTROYED
. ( I86552 , b/198741720 ) - Nullable
NavDeepLink
arguments no longer require a default value. ( Ia14ef , b/198689811 ) - Calling
setGraph()
with a new graph will now also clear any saved back stacks in addition to its previous behavior of popping the back stack. ( I97f96 ) - Fixed an issue where
OnDestinationChangedListener
instances and thecurrentBackStackEntryFlow
were not notified when usinglaunchSingleTop
. ( Iaaebc )
Обновления зависимостей
- Navigation Compose now depends on Activity Compose 1.3.1 . ( I05829 )
- Navigation Compose now depends on Lifecycle ViewModel Compose
2.4.0-beta01
. ( Ib86a3 )
Version 2.4.0-alpha08
1 сентября 2021 г.
androidx.navigation:navigation-*:2.4.0-alpha08
is released. Version 2.4.0-alpha08 contains these commits.
Новые возможности
- It is now possible to extend the
NavType
class to create custom NavTypes. Custom types are supported only when building your navigation graph programmatically, such as via the Navigation Graph Kotlin DSL . ( I78440 , b/196871885 )
Изменения поведения
- When generating actions, Kotlin code generated from Safe Args now puts arguments without default values before those with default values as parameters. ( Idb697 , b/188855904 )
- Deep links now verify that all required arguments (those without default values) are present in the
Uri
. ( #204 , b/185527157 )
Исправления ошибок
- Using
getBackStackEntry
andpreviousBackStackEntry
inside composable(), in conjunction withremember()
, will no longer cause an exception for no destination being on the back stack. ( I75138 , b/194313238 ) - Navigation Compose now properly recomposes when changing back stack arguments and using
launchSingleTop=true
. ( Iebd69 , b/186392337 ) - There will no longer be an
ArrayIndexOutOfBoundsException
when callingsetGraph
with a graph with 13 or 29 destinations. ( I1a9f1 , b/195171984 ) - The SafeArgs java generator should no longer cause lint warnings when generating Args classes. ( I1a666 , b/185843837 )
Внешний вклад
- Thanks ospixd for ensuring that deep links verify that all required arguments (those without default values) are present in the
Uri
. ( #204 , b/185527157 )
Version 2.4.0-alpha07
18 августа 2021 г.
androidx.navigation:navigation-*:2.4.0-alpha07
is released. Version 2.4.0-alpha07 contains these commits.
Исправления ошибок
- Navigation Compose now properly saves state after configuration changes and when changing graphs while using the multiple back stack feature. ( If5a3d , b/195141957 )
- Re-selecting the same tab when using navigation compose with multiple back stacks will no longer result in a blank screen. ( I860dc , b/194925622 )
-
NavHost
now observes for changes in theLifecycle.State
ofNavBackStackEntry
s which means using aNavHost
in a fragment now will properly be recomposed as the lifecycle changes instead of resulting in a blank screen. ( I4eb85 , b/195864489 ) - Fixed an issue where dismissing a
DialogFragment
would not correctly update theNavController
state after recreating your activity (ie, after a configuration change). ( Icd72b ) - Fixed an issue where popping a dialog destination would not update the NavController's system back button handling, potentially causing the NavController to intercept the back button even though it does not have any back stack to pop. ( If3b34 )
- Safe-args now automatically generates a
toSavedStateHandle
method for arguments which can be used to test yourViewModel
code. ( If1e2d , b/193353880 )
Version 2.4.0-alpha06
4 августа 2021 г.
androidx.navigation:navigation-*:2.4.0-alpha06
is released. Version 2.4.0-alpha06 contains these commits.
Изменения API
- The
requireSlidingPaneLayout()
andrequireDetailPaneNavHostFragment()
methods onAbstractListDetailFragment
have been renamed togetSlidingPaneLayout()
andgetDetailPaneNavHostFragment()
, respectively. ( I34a08 )
Изменения поведения
- When navigating with animations (like
Crossfade
), the new destination'sLifecycle
will now only reach theRESUMED
when the animation completes. ( If0543 , b/172112072 , b/194301889 ) - Navigation Compose's
NavHost
now sets the graph as part of the first composition. ( Ieb7be )
Исправления ошибок
- Popping the last destination of a navigation graph no longer throws a
ClassCastException
. ( If0543 , b/172112072 , b/194301889 ) - Fixed a
NullPointerException
that would occur when adding a deep link without aUri
and navigating via a route or deep link. ( 938a0c , b/193805425 ) - Fixed an issue in Navigation Compose where a deep linked
NavBackStackEntry
would not reach theRESUMED
state. ( I192c5 ) - Fixed an issue where popping a dialog destination would not update the NavController's system back button handling, potentially causing the NavController to intercept the back button even though it does not have any back stack to pop. ( aosp/1782668 )
Version 2.4.0-alpha05
21 июля 2021 г.
androidx.navigation:navigation-*:2.4.0-alpha05
is released. Version 2.4.0-alpha05 contains these commits.
Изменения поведения
- Navigation Compose's
NavHost
now always uses Crossfades when navigating through destinations. ( I07049 , b/172112072 ) - You can now make changes to the graph of a NavHost. Graphs with the same startDestination and destinations in the graph will be considered equal and will not clear the
NavController
back stack. ( I0b8db , b/175392262 )
Исправления ошибок
- Fixed a
NoSuchElementException
when callingpopBackStack()
from within aLifecycleObserver
attached to aNavBackStackEntry
caused by reentrant updates to the NavController's state. ( I64621 ) -
AbstractListDetailFragment
now allowsSlidingPaneLayout
to be completely stripped from your APK whenAbstractListDetailFragment
is not used. ( I611ad ) -
NavGraph
andNavDestination
now override the equals method so two objects with the same values will be considered equal. ( I166eb , b/175392262 )
Version 2.4.0-alpha04
July 1, 2021
androidx.navigation:navigation-*:2.4.0-alpha04
is released. Version 2.4.0-alpha04 contains these commits.
Новые возможности
- The
navigation-fragment
artifact now contains a prebuilt implementation of a two pane layout via the newAbstractListDetailFragment
. This fragment uses aSlidingPaneLayout
to manage a list pane (which your subclass provides) and a detail pane, which uses aNavHostFragment
as its implementation, as seen in our example implementation . ( Iac4be , b/191276636 ) - The
NavHost
of thenavigation-compose
artifact now supportsdialog
destinations in addition tocomposable
destinations. These dialog destinations will each be shown within a ComposableDialog
, floating above the currentcomposable
destination. ( I011d0 )
val navController = rememberNavController()
Scaffold { innerPadding ->
NavHost(navController, "home", Modifier.padding(innerPadding)) {
composable("home") {
// This content fills the area provided to the NavHost
HomeScreen()
}
dialog("detail_dialog") {
// This content will be automatically added to a Dialog() composable
// and appear above the HomeScreen or other composable destinations
DetailDialogContent()
}
}
}
Изменения API
- The
add
function inNavigatorState
has been renamed topush
. All current calls toadd()
will need to be changed to push(). ( Ie89fc , b/172112072 ) - Custom
Navigator
instances can now use thepushWithTransaction
andpopWithTransition
APIs onNavigatorState
to push or pop a destination asynchronously. Note that this APIs are not yet used by any of the included navigators. ( Ic4d7c , b/172112072 )
Изменения поведения
-
NavDeepLinkBuilder
now addsPendingIntent.FLAG_IMMUTABLE
to thePendingIntent
returned bycreatePendingIntent()
, ensuring that this API works as expected when targeting Android 12. ( If8c52 )
Исправления ошибок
- Fixed an issue with
<include-dynamic>
where arguments passed to the graph would not be correctly passed to the dynamically included graph. ( I3e115 ) - Fixed a
NullPointerException
when navigating to a destination using astring[]
argument with a default value of@null
. ( I1fbe8 ) - Add ProGuard rules for
@Navigator.Name
, fixing issues when using R8 3.1 full mode. ( I2add9 , b/191654433 ) - SafeArgs will no longer fail when building your app with
Kotlin
versions before1.5.0
. ( Icd1ff , b/190739257 )
Версия 2.4.0-Alpha03
16 июня 2021 г.
androidx.navigation:navigation-*:2.4.0-alpha03
is released. Версия 2.4.0-Alpha03 содержит эти коммиты.
Исправления ошибок
- Fixed an issue where two
navigate()
calls were needed to navigate to an included dynamic graph. ( I7785c , b/188859835 ) - Fixed a regression introduced in Navigation
2.4.0-alpha01
wheresetupActionBarWithNavController()
would not properly remove the Up icon when you are on a top level destination. ( I5d443 , b/189868637 ) - Fixed an
IllegalStateException
when callingpopBackStack()
after previously popping the root graph of the NavController. ( I2a330 , b/190265699 ) - ProGuard rules for
by navArgs()
now properly apply when usingnavigation-common
or any artifacts that depend on it. ( I68800 , b/190082521 ) - An
OnDestinationChangedListener
that callsnavigate()
the first time it receives a callback now properly get a second callback with the destination it navigated to. ( Ie5f9e , b/190228815 ) - Safe Args no longer crashes when using it with dynamic feature modules and AGP 7.0+. ( I69518 , b/189966576 )
Известная проблема
- Safe Args will fail with an
Unable to find method ''java.lang.String kotlin.text.CarsKt.titleCase(char, java.util.Locale)''
error when using Gradle6.7.0
due to a dependency on an older version of Kotlin. This can be worked around by updating to use Gradle 7.0. ( b/190739257 )
Версия 2.4.0-Alpha02
2 июня 2021 г.
androidx.navigation:navigation-*:2.4.0-alpha02
is released. Версия 2.4.0-Alpha02 содержит эти коммиты.
Новые возможности
- Routes are now supported for Activity, Fragment and Dialog destinations, as well as throughout the DynamicNavigation Kotlin DSL. ( Ib5544 , Ia617b , I22f96 , b/188914648 , b/188901565 )
-
NavigationUI
has temporarily added experimental APIs to allow opting out of saving your state. While always saving the state is the correct behavior, there are still uses of deprecated libraries (ie retained fragments), that cannot be supported when saving the state so this gives an opportunity for apps to slowly convert away from any unsupported APIs. ( Idf93c ) Navigation now provides
findDestination()
andgetHierarchy()
APIs that can be used to help implement custom NavigationUI.findDestination()
is an extension function onNavGraph
that will locate a destination within the graph.getHierarchy()
is a function onNavDestination
that can be used to verify if a given destination is within the hierarchy of another.( I2932f , b/188183365 )val matchingRoute: Boolean = destination.hierarchy.any { it.route == routeToFind }
NavigationUI methods that took a
BottomNavigationView
have been updated to instead take its superclass introduced in Material1.4.0
,NavigationBarView
. This allows these methods to be used with theNavigationRailView
. ( Ib0b36 , b/182938895 )When inflating an
<action>
element via XML, animation attributes can use attributes pulled from your theme using theapp:enterAnim="?attr/transitionEnter"
syntax. ( I07bc1 , b/178291654 )
Изменения API
- Kotlin DSL builders that use an ID have been deprecated and should be replaced with builders that use routes ( I85b42 , b/188816479 ) ( I9f58f , b/188816479 )
Исправления ошибок
-
DialogFragmentNavigator
now uses theNavigatorState.pop()
API to inform theNavController
when a dialog is dismissed by hitting the system back button or clicking outside of it, ensuring that theNavController
state is always in sync with the Navigator's state. ( I2ead9 ) Navigation no longer gives a
ConcurrentModificationException
when using manipulating the list ofOnDestinationChangedListeners
from with anonDestinationChanged
callback. ( Ib1707 , b/188860458 )Safe Args no longer crashes when attempting to generate direction properties in Kotlin. ( Id2416 , b/188564435 )
The setId method on NavDestination is now properly annotated with
@IdRes
, so it only accepts resource ids. ( I69b80 )The int parameter of
findNode
is nowresId
instead ofresid
. ( I7711d )
Dependency Update
- Safe-Args now depends on Android Gradle Plugin 4.2.0. This means you should no longer get the using
applicationIdTextResource
warning. ( I6d67b , b/172824579 )
Версия 2.4.0-Alpha01
May 18, 2021
androidx.navigation:navigation-*:2.4.0-alpha01
is released. Версия 2.4.0-Alpha01 содержит эти коммиты.
Новые возможности
- The
currentBackStackEntryAsFlow()
method onNavController
provides aFlow
that emits whenever the currentNavBackStackEntry
changes. This flow can be used as an alternative to manually managing anOnDestinationChangedListener
. ( I19c4a , #89 , b/163947280 )
Multiple back stacks
The NavController is responsible for managing the back stack of destinations, adding destinations to the back stack when you navigate()
to them and removing them when you call popBackStack()
or trigger the system back button. The existing NavOptions
class and the integration into <action>
entries in the navigation graph XML has been expanded to support saving and restoring the back stack. ( b/80029773 )
As part of this change, the NavigationUI
methods of onNavDestinationSelected()
, BottomNavigationView.setupWithNavController()
and NavigationView.setupWithNavController()
now automatically save and restore the state of popped destinations, enabling support for multiple back stacks without any code changes. When using Navigation with Fragments, this is the recommended way to integrate with multiple back stacks. ( Ie07ca )
The underlying APIs for saving and restoring the state are exposed via a number of surfaces:
In Navigation XML, the
<action>
element can now use the boolean attributes ofapp:popUpToSaveState
andapp:restoreState
to save the state of any destinations popped viaapp:popUpTo
and restore the state associated with the destination passed as theapp:destination
:<action android:id=”@+id/swap_stack” app:destination=”@id/second_stack” app:restoreState=”true” app:popUpTo=”@id/first_stack_start_destination” app:popUpToSaveState=”true” />
In the
navOptions
Kotlin DSL , you can add therestoreState
boolean property and thesaveState
boolean property on thepopUpTo
builder :// Use the navigate() method that takes a navOptions DSL Builder navController.navigate(selectedBottomNavRoute) { launchSingleTop = true restoreState = true popUpTo(navController.graph.startDestinationId) { saveState = true } }
In manually building a
NavOptions
object via theNavOptions.Builder
, you can use thesetRestoreState()
and new overload tosetPopUpTo()
that takes an additionalsaveState
parameter.NavOptions navOptions = new NavOptions.Builder() .setLaunchSingleTop(true) .setRestoreState(true) .setPopUpTo(navController.getGraph().getStartDestinationId(), false, // inclusive true) // saveState .build(); navController.navigate(selectedBottomNavId, null, navOptions);
Programmatic calls to
popBackStack()
can now include an additionalsaveState
parameter.
In all cases, the NavController
will save and restore the state of each NavBackStackEntry
, including any navigation destination scoped ViewModel
instances. The Navigator
APIs have been updated to enable each Navigator
to support saving and restoring their own state.
The ComposeNavigator
used for composable
destinations in Navigation Compose and the FragmentNavigator
and DynamicFragmentNavigator
used for <fragment>
destinations in Navigation with Fragments have both been updated to use the new Navigator APIs and support saving and restoring state.
Navigation Routes
A route is a String
that uniquely identifies a destination. While previously only used in Navigation Compose , this concept has now graduated to become a part of the core Navigation APIs. This provides an alternative to using integer IDs when constructing your graph through the Navigation Kotlin DSL . ( b/172823546 )
All APIs that used to only take an ID now have an overload that takes a route String
. This includes navigate()
, popBackStack()
, popUpTo()
, and getBackStackEntry()
.
This has had some API implications:
- The
popUpTo
kotlin property on the Kotlin DSL has been deprecated in favor ofpopUpToId
. ( I59c73 , b/172823546 ) - The
getStartDestination()
API has been deprecated in favor ofgetStartDestinationId()
. ( I0887f , b/172823546 )
For developers upgrading from previous versions of Navigation Compose to Navigation Compose 2.4.0-alpha01
, this means that the following imports on extension methods are no longer necessary and should be removed:
import androidx.navigation.compose.navigation
import androidx.navigation.compose.createGraph
import androidx.navigation.compose.getBackStackEntry
import androidx.navigation.compose.navigate
import androidx.navigation.compose.popUpTo
The KEY_ROUTE
argument has been replaced with the route
property on NavDestination
, allowing you to call navBackStackEntry.destination.route
directly.
Изменения API
- All Navigation artifacts have been rewritten in Kotlin. This has improved the nullability of classes using generics (such as
NavType
subclasses). All Kotlin extension functions that used to be part of the-ktx
artifacts have been moved to their respective main artifacts. The-ktx
artifacts will continue to be published, but are completely empty. ( b/184292145 ) -
NavDeepLinkBuilder
now supports adding multiple distinct destinations to the generated back stack. ( I3ee0d , b/147913689 ) - Add factory functions for
DynamicNavHostFragment
( Icd515 , b/175222619 ) - The unique ID of a
NavBackStackEntry
is now exposed as part of its public API. ( Ie033a ) - The
name
andargument
fields and destructuring functions ofNamedNavArgument
are now public. ( #174 , b/181320559 ) - Introduced a new
NavBackStackEntry#provideToCompositionLocals
extension that provides theNavBackStackEntry
to the relevant composition locals. ( #175 , b/187229439 )
Safe Args
Safe Args now generates a
fromSavedStateHandle()
method for eachNavArgs
class. ( #122 , b/136967621 )class HomeViewModel(savedStateHandle: SavedStateHandle) : ViewModel() { // Create a HomeDestinationArgs class with type safe accessors for each argument // defined on your destination private val args = HomeDestinationArgs.fromSavedStateHandle(savedStateHandle) }
Updated Safe Args to depend on KotlinPoet
1.8.0
. ( #172 , b/183990444 )
Изменения поведения
- Navigation now depends on Lifecycle
2.3.1
and now markssetGraph()
,popBackStack()
,navigateUp()
, andnavigate()
, the methods that update theNavBackStackEntry
Lifecycle
, as@MainThread
, aligning Navigation with the main thread enforcement introduced in Lifecycle2.3.0
. ( b/171125856 ) - Parsing Enum arguments from deep links is now case insensitive, allowing a deep link like
http://www.example.com/red
to match awww.example.com/{color}
deep link even when the enum has the value ofRED
. ( #152 , b/135857840 )
Compose Compatibility
-
androidx.navigation:navigation-compose:2.4.0-alpha01
is only compatible with Compose version1.0.0-beta07
and above.
Исправления ошибок
- Fixed an issue where trailing argument placeholders would take precedence over deep links that have a matching exact suffix. ( #153 , b/184072811 )
-
NavHostFragment
now supports custom Navigators that use the same@Navigator.Name("dialog")
as the defaultDialogFragmentNavigator
. ( Ib1c2c , b/175979140 ) - Improved the behavior of
NavigatorProvider#addNavigator
to ensure that calling it repeatedly with the same instance does not cause issues. ( #176 , b/187443146 )
Внешние взносы
- Thanks simonschiller for building support for Safe Args generating a
fromSavedStateHandle()
method for eachNavArgs
class. ( #122 , b/136967621 ) - Thanks Bradleycorn for making parsing Enum arguments from deep links case insensitive. ( #152 , b/135857840 )
- Thanks osipxd for fixing an issue where trailing argument placeholders would take precedence over deep links that have a matching exact suffix. ( #153 , b/184072811 )
- Thanks tatocaster for updating Safe Args to depend on KotlinPoet
1.8.0
. ( #172 , b/183990444 ) - Thanks jossiwolf for making the
name
andargument
fields and destructuring functions ofNamedNavArgument
public. ( #174 , b/181320559 ) - Thanks jossiwolf for introducing a new
NavBackStackEntry#provideToCompositionLocals
extension that provides theNavBackStackEntry
to the relevant composition locals. ( #175 , b/187229439 ) - Thanks jossiwolf for improved the behavior of
NavigatorProvider#addNavigator
to ensure that calling it repeatedly with the same instance does not cause issues. ( #176 , b/187443146 )
Navigation Compose Version 1.0.0
Версия 1.0.0-альфа10
7 апреля 2021 г.
androidx.navigation:navigation-compose:1.0.0-alpha10
is released. Версия 1.0.0-alpha10 содержит эти коммиты.
Изменения API
-
NavHost
now accepts aModifier
, which is passed down to the composable container that wraps the destination composables. ( I85aca , b/175125483 )
Исправления ошибок
-
NavHost
now works even when anOnBackPressedDispatcherOwner
is not found, such is the case when previewing theNavHost
. ( I7d8b4 ) - Navigation Compose now depends on Navigation
2.3.5
, fixing an issue when usingBackHandler
inside aNavHost
destination. ( I7e63b , b/182284739 )
Версия 1.0.0-альфа09
10 марта 2021 г.
androidx.navigation:navigation-compose:1.0.0-alpha09
is released. Версия 1.0.0-alpha09 содержит эти коммиты.
Изменения API
-
LocalViewModelStoreOwner.current
теперь возвращает нулевойViewModelStoreOwner
, чтобы лучше определить, доступен лиViewModelStoreOwner
в текущей композиции. API, которые требуютViewModelStoreOwner
, например,viewModel()
иNavHost
, все еще бросают исключение, если не установленViewModelStoreOwner
. ( IDF39a )
Исправления ошибок
- Navigation Compose now depends on Navigation 2.3.4 which includes the fix for attempting to set the same ViewModelStore object after the graph has been set. ( I65c24 , b/177825470 )
Версия 1.0.0-альфа08
24 февраля 2021 г.
androidx.navigation:navigation-compose:1.0.0-alpha08
is released. Версия 1.0.0-alpha08 содержит эти коммиты.
Новые возможности
-
NavHost
now populates theLocalSavedStateRegistryOwner
CompositionLocal with that destination'sNavBackStackEntry
, ensuring that any state directly saved into theSavedStateRegistry
will be saved and restored alongside the destination. ( I435d7 , b/179469431 )
Версия 1.0.0-альфа07
10 февраля 2021 г.
androidx.navigation:navigation-compose:1.0.0-alpha07
is released. Версия 1.0.0-alpha07 содержит эти коммиты.
Обновления зависимостей
- Navigation Compose now depends on Lifecycle ViewModel Compose 1.0.0-alpha01 to provide
viewModel()
support tocomposable
destinations. ( I7a374 ) -
NavHost
now uses the newLocalOnBackPressedDispatcherOwner
from Activity-Compose 1.3.0-alpha01 to get theOnBackPressedDispatcher
that is set on theNavController
. ( I65b12 )
Версия 1.0.0-альфа06
28 января 2021 г.
androidx.navigation:navigation-compose:1.0.0-alpha06
is released. Версия 1.0.0-alpha06 содержит эти коммиты.
Изменения API
- Added a
getBackStackEntry(route: String)
extension method onNavController
that returns the associatedNavBackStackEntry
. ( If8931 )
Версия 1.0.0-альфа05
13 января 2021 г.
androidx.navigation:navigation-compose:1.0.0-alpha05
is released. Версия 1.0.0-alpha05 содержит эти коммиты.
Updated to depend on Compose 1.0.0-alpha10.
Версия 1.0.0-альфа04
16 декабря 2020 г.
androidx.navigation:navigation-compose:1.0.0-alpha04
is released. Версия 1.0.0-alpha04 содержит эти коммиты.
- Updated for compatibility with Compose
1.0.0-alpha09
.
Версия 1.0.0-альфа03
2 декабря 2020 г.
androidx.navigation:navigation-compose:1.0.0-alpha03
is released. Версия 1.0.0-alpha03 содержит эти коммиты.
Исправления ошибок
- Fixed an issue where
popBackStack()
andnavigateUp()
would not work after a configuration change or process death and recreation. ( Icea47 , b/173281473 ) - Navigating to a nested graph within your NavHost now works properly. ( I0948d , b/173647694 )
Версия 1.0.0-альфа02
11 ноября 2020 г.
androidx.navigation:navigation-compose:1.0.0-alpha02
is released. Версия 1.0.0-alpha02 содержит эти коммиты.
Изменения API
- Navigation compose now support NavOptions for using popUpTo and launchSingleTop operations ( If96c3 , b/171468994 )
- Added a navigation function that takes a route instead of an ID that allows you to construct nested graphs in the Navigation Compose DSL. ( I1661d )
- startDestination now comes before the route in the list of a parameters for a NavHost ( Ie620e )
- You can now create a graph using the route as a start destination outside of a NavHost composable. ( Iceb75 )
Версия 1.0.0-альфа01
28 октября 2020 г.
android.navigation:navigation-compose:1.0.0-alpha01
is released. Версия 1.0.0-alpha01 содержит эти коммиты.
Новые возможности
The navigation-compose
artifact provides integration between the Navigation Component and Jetpack Compose . It uses @Composable
functions as the destinations in your application.
This initial release provides:
- A
NavHost
composable that allows you to construct your navigation graph via a Kotlin DSL. - Scoping of lifecycle,
ViewModel
, and remembered state at the destination level. - Automatic integration with the system back button.
- Support for passing arguments, attaching deep links to destinations, and returning a result to previous destinations.
- Compose specific helpers in
rememberNavController()
andcurrentBackStackEntryAsState()
to allow hoisting state and connecting theNavController
to composables outside of theNavHost
(such as a bottom navigation bar).
See the Compose Navigation guide for more information.
Version 2.3.5
Version 2.3.5
7 апреля 2021 г.
androidx.navigation:navigation-*:2.3.5
is released. Version 2.3.5 contains these commits.
Новые возможности
- When navigating using a
NavDeepLinkRequest
orUri
, you can now access theUri
, action, and mime type in the resulting destination by getting the intent from arguments viaKEY_DEEP_LINK_INTENT
, mirroring the functionality already available for external deep linking. ( I975c3 , b/181521877 )
Исправления ошибок
-
OnBackPressedCallbacks
added to a dispatcher with theNavBackStackEntry
as the LifecycleOwner now properly intercept back after the Activity Lifecycle isSTOPPED
, thenSTARTED
( Iff94f , b/182284739 ) - Deep link domain parsing is now case insensitive, ensuring that
www.example.com
matches bothwww.example.com
andwww.Example.com
. Note that query parameter names are still case sensitive. ( #144 , b/153829033 ) - Fixed a
NullPointerException
that could occur when a destination has multiple non-nullable default arguments and you navigate to that destination while only overriding a subset of those arguments. ( aosp/1644827 )
Обновления зависимостей
- The Navigation Safe Args Gradle Plugin now depends on Kotlin Gradle Plugin 1.4.31. ( aosp/1661058 , b/181156413 )
Внешний вклад
- Thanks
bentrengrove
for the pull request making deep link domain parsing case insensitive. ( #144 , b/153829033 )
Version 2.3.4
Version 2.3.4
10 марта 2021 г.
androidx.navigation:navigation-*:2.3.4
is released. Version 2.3.4 contains these commits.
Новые возможности
-
ReferenceType
arguments can now be properly parsed when sent as part of a deeplink URI. This supports both the raw integer value as well as hex values prefixed by0x
. ( #127 , b/179166693 ) - The
android:defaultValue
for an argument withapp:argType="float"
now supports integer default values, allowing you to useandroid:defaultValue="0"
rather than requiring the use of0.0
. ( #117 , b/173766247 )
Исправления ошибок
- Fix stuck installation progress when using Navigation's support for dynamic features. ( Ib27a7 , b/169636207 )
- Calling
setViewModelStore
orsetLifecycleOwner
with the same object that has already been set will now be a no-op ( Idf491 , b/177825470 ) - Safe-Args now adds suppress annotations on the proper methods when using java. ( I8fbc5 , b/179463137 )
Внешние взносы
- Thanks
JvmName
for the pull request to ensure thatReferenceType
arguments can now be properly parsed when sent as part of a deeplink URI. ( #127 , b/179166693 ) - Thanks
tatocaster
for the pull request to allow thedefaultValue
for an argument withapp:argType=”float”
now supports integer default values. ( #117 , b/173766247 )
Version 2.3.3
Version 2.3.3
27 января 2021 г.
androidx.navigation:navigation-*:2.3.3
is released. Version 2.3.3 contains these commits.
Исправления ошибок
- There is no longer a crash when popping a
NavBackStackEntry
before itsLifecycle
is moved toCREATED
. ( Ie3ba3 ) - Fixed regression caused by b/171364502 where navigating to an activity with an animation resource value of
0
caused aResourceNotFoundException
. ( I7aedb , b/176819931 )
Version 2.3.2
Version 2.3.2
2 декабря 2020 г.
androidx.navigation:navigation-*:2.3.2
is released. Version 2.3.2 contains these commits.
Исправления ошибок
- Fixed a regression in
NavigationUI
where using an<activity>
destination withonNavDestinationSelected
would fail to navigate to the Activity. ( I22e34 , b/171364502 ) - Fixed an issue where
navigation-dynamic-features-fragment
would result in navigating to the newly installed destination multiple times. ( aosp/1486056 , b/169636207 ) - Fixed an issue where default arguments would not be sent to
OnDestinationChangedListener
instances when usinglaunchSingleTop
. ( I2c5cb ) - Fixed an issue where navigating to a nested navigation graph would not create a new graph instance on the back stack. ( Ifc831 )
- Fixed an issue where using
navigate()
with apopUpTo
that removed the last destination in a navigation graph would not immediately destroy and remove the navigation graph itself from the back stack. ( I910a3 ) - Navigation SafeArgs now uses KotlinPoet version 1.7.2 which adds support for Kotlin's explicit API mode. ( I918b5 )
-
NavHostFragment.findNavController(Fragment)
now also checks the root decor view of a DialogFragment in addition to the existing checks of the Fragment hierarchy and Fragment's view hierarchy. This allows you to test dialog fragments that use Navigation withFragmentScenario
andNavigation.setViewNavController()
. ( I69e0d )
Версия 2.3.1
Версия 2.3.1
14 октября 2020 г.
androidx.navigation:navigation-*:2.3.1
is released. Версия 2.3.1 содержит эти коммиты.
Новые возможности
- Default Animator resources have been added to Navigation UI and are recommended over the default animation resources. ( b/167430145 )
- NavOptions now overrides the hashcode and equals methods ( b/161586466 )
- Navigation now includes the current destination in the “No destination with ID” IllegalArgumentException, which should improve the developer debugging experience. ( b/168311416 )
Исправления ошибок
- Safe Args will no longer wrap the return line, even if the generated argument class name is longer than 100 characters. ( b/168584987 )
Изменения зависимости
-
navigation-ui
now depends on DrawerLayout 1.1.1 , ensuring thatNavigationUI
is able to open the drawer even when usingLOCK_MODE_LOCKED_CLOSED
orLOCK_MODE_LOCKED_OPEN
. ( b/162253907 ) - Safe Args now depends on KotlinPoet 1.6.0 ( aosp/1435911 )
- Safe Args now depends on AGP 4.0.1 ( aosp/1442337 )
Версия 2.3.0
Версия 2.3.0
24 июня 2020 г.
androidx.navigation:navigation-*:2.3.0
is released. Версия 2.3.0 содержит эти коммиты.
Основные изменения с 2.2.0
- Feature Module integration : The
navigation-dynamic-features-runtime
andnavigation-dynamic-features-fragment
artifacts allow you to navigate to destinations that are defined in feature modules, automatically handling the installation of the feature modules as needed. See Navigate with feature modules for more information. - Navigation Testing : The
navigation-testing
artifact provides aTestNavHostController
that allows you to set the current destination and verify the back stack after navigation operations. See Test Navigation for more information. - Returning a Result : The
NavBackStackEntry
associated with each destination on the Navigation back stack now allows you to access aSavedStateHandle
suitable for storing small amounts of saved state that should be associated with a particular back stack entry. See Returning a result to the previous Destination for more information. -
NavigationUI
support forOpenable
: All usages ofDrawerLayout
inNavigationUI
have been replaced with the more genericOpenable
interface added in CustomView1.1.0
and implemented byDrawerLayout
in DrawerLayout1.1.0
. - Action and Mime Type support in deep links : Deep linking has been expanded to support
app:action
andapp:mimeType
in addition to theapp:uri
previously available.NavController
now supports navigating by any combination of these fields via the newNavDeepLinkRequest
class. See Navigate using NavDeepLinkRequest for more information.
Известные проблемы
- Support for deep link actions and mime types is not yet available in Manifest Merger . Until that work is completed, any generated
<intent-filter>
elements from the<nav-graph>
element in your manifest won't include your mime type in its<data>
element or your custom<action>
. You must manually add an appropriate<intent-filter>
to your manifest.
Версия 2.3.0-RC01
10 июня 2020 г.
androidx.navigation:navigation-*:2.3.0-rc01
is released. Версия 2.3.0-RC01 содержит эти коммиты.
Исправления ошибок
- Fixed a
NullPointerException
when replacing an instance of a destination with no arguments with another instance with arguments withsingleTop
. ( b/158006669 ) - All
destination is unknown
exceptions thrown byNavController
now have additional debugging information to help determine the state of theNavController
. ( b/157764916 )
Версия 2.3.0-бета01
20 мая 2020 г.
androidx.navigation:navigation-*:2.3.0-beta01
are released. Версия 2.3.0-бета01 содержит эти коммиты.
Исправления ошибок
- Fixed an issue where the
Lifecycle
of theNavBackStackEntry
would not be properly updated after process death. ( b/155218371 ) -
OnDestinationChangedListener
instances registered before callingsetGraph()
are now properly sent the restored destination after a process death. ( b/155218371 ) - When using
singleTop
, theNavBackStackEntry
now correctly has its arguments updated and the updated arguments are sent to allOnDestinationChangeListener
instances. ( b/156545508 )
Обновления зависимостей
- The
NavigationUI
artifact now depends on CustomView1.1.0-rc01
and DrawerLayout1.1.0-rc01
. ( aosp/1309696 )
Версия 2.3.0-Alpha06
29 апреля 2020 г.
androidx.navigation:navigation-*:2.3.0-alpha06
is released. ( Version 2.3.0-alpha06 contains these commits. )
Новые возможности
- Deep linking has been expanded to support
app:action
andapp:mimeType
in addition to theapp:uri
previously available. NavController now supports navigating by any combination of these fields via the newNavDeepLinkRequest
class. ( b/136573074 , b/135334841 )
Изменения API
- Greatly expanded the Kotlin DSL support for Dynamic Navigation destinations. ( b/148969800 )
Исправления ошибок
- Fixed an issue where deep link Intents would be ignored when using a nested start destination. ( b/154532067 )
Версия 2.3.0-Alpha05
15 апреля 2020 г.
androidx.navigation:navigation-*:2.3.0-alpha05
is released. Версия 2.3.0-Alpha05 содержит эти коммиты.
Новые возможности
- For dynamic graph includes using
<include-dynamic>
, you no longer need to specifyapp:graphPackage
and a default one will be used by addingmoduleName
suffix to theapplicationId
after a dot. If you do need to customize yourgraphPackage
, an${applicationId}
placeholder is now supported. ( b/152696768 ) - The Navigation Graph Kotlin DSL now exposes a
defaultArguments
Map
for actions, mirroring the ability to set default values on<action>
elements in Navigation XML files. ( b/150345605 )
Исправления ошибок
- From Navigation 2.2.2 : Fixed an
IllegalStateException
when deep linking to the start destination of your graph when you have multipleNavHostFragment
instances in your Activity. ( b/147378752 )
Dependency updates
- Navigation now depends on Fragment
1.2.4
. ( aosp/1277325 ) - Dynamic Navigation now depends on Play Core
1.7.2
. ( aosp/1282257 )
Версия 2.3.0-Alpha04
18 марта 2020 г.
androidx.navigation:navigation-*:2.3.0-alpha04
is released. Версия 2.3.0-Alpha04 содержит эти коммиты.
Новые возможности
- Added support for feature module activity and fragment destinations in the Navigation Kotlin DSL. ( b/148969800 )
Изменения API
- The
DynamicExtras
class no longer uses a builder pattern and can now be constructed directly. ( aosp/1253671 ) -
DynamicActivityNavigator
now takes aContext
in its constructor rather than anActivity
. ( aosp/1250252 )
Исправления ошибок
-
NavigationUI
no longer ignores empty labels (ie, a destination withandroid:label=””
) and now correctly sets the title to an empty string. ( b/148679860 )
Обновления зависимостей
- The Navigation Dynamic Features artifacts now depend on Play Core
1.6.5
. ( b/149556401 )
Версия 2.3.0-Alpha03
4 марта 2020 г.
androidx.navigation:navigation-*:2.3.0-alpha03
is released. Версия 2.3.0-Alpha03 содержит эти коммиты.
Изменения API
- Instead of relying on the concrete
DrawerLayout
class,AppBarConfiguration
now uses theOpenable
interface introduced in CustomView1.1.0-alpha02
(whichDrawerLayout
implements as of DrawerLayout1.1.0-alpha04
), allowing you to use custom implementations ofOpenable
withNavigationUI
. ( b/129030452 )
Исправления ошибок
- The
navigation-common-ktx
ProGuard rules now correctly only keep theNavArgs
classes that are used rather than allNavArgs
instances. ( b/150213558 )
Dependency changes
- Navigation has reverted its dependency on Core
1.2.0
and now depends on Core1.1.0
to avoid forcing developers to move to a newer dependency when Navigation does not depend on any new APIs in Core1.2.0
.
Версия 2.3.0-Alpha02
19 февраля 2020 г.
androidx.navigation:navigation-*:2.3.0-alpha02
is released. Версия 2.3.0-Alpha02 содержит эти коммиты.
Новые возможности
- The
NavBackStackEntry
now allows you to access aSavedStateHandle
suitable for storing small amounts of saved state that should be associated with a particular back stack entry. See Returning a result for an example use case. ( b/79672220 )
Изменения API
- Convenience methods of
getCurrentBackStackEntry()
andgetPreviousBackStackEntry()
have been added to make it easier to retrieve aNavBackStackEntry
for the current and previous destinations. ( b/79672220 )
Исправления ошибок
-
navigateUp()
now passes the current destination's arguments and theKEY_DEEP_LINK_INTENT
to the previous destination when launching your app on your own task stack. ( b/147456890 )
Dependency changes
- Navigation now depends on Core
1.2.0
.
Версия 2.3.0-Alpha01
5 февраля 2020 г.
androidx.navigation:navigation-*:2.3.0-alpha01
is released. Version 2.3.0-alpha01 contains these commits .
Новые возможности
- The new
navigation-testing
artifact provides aTestNavHostController
class. This class provides an alternative to using a mockNavController
when testing Navigation that allows you to set the current destination and verify the back stack after navigation operations. ( b/140884273 ) - The new
navigation-dynamic-features-fragment
(and its transitive dependency,navigation-dynamic-features-runtime
) allows you to include destinations or entire navigation graphs (via<include-dynamic>
) from feature modules , providing seamless installation of on-demand feature modules when navigating to those destinations. See Navigate with feature modules for more information. ( b/132170186 )
Исправления ошибок
- From Navigation
2.2.1
: Deep links without query parameters now correctly ignore any query parameters rather than appending them to trailing{argument}
elements or not matching the deep link. ( b/147447512 ) - From Navigation
2.2.1
: Thenavigation-ui
ProGuard rules forDrawerArrowDrawable
have been updated to ensure thatandroid.enableJetifier=true
is not required. ( b/147610424 ) - From Navigation
2.2.1
: Thenavigation-common-ktx
module now has a unique manifest package name instead of sharing the same manifest package name asnavigation-runtime-ktx
. ( aosp/1141947 )
Dependency updates
- From Navigation
2.2.1
: Navigation2.2.1
now depends on Lifecycle ViewModel SavedState2.2.0
and Fragment1.2.1
.
Version 2.2.2
Version 2.2.2
15 апреля 2020 г.
androidx.navigation:navigation-*:2.2.2
are released. Version 2.2.2 contains these commits.
Исправления ошибок
- Fixed an
IllegalStateException
when deep linking to the start destination of your graph when you have multipleNavHostFragment
instances in your Activity. ( b/147378752 ) -
NavigationUI
no longer ignores empty labels (ie, a destination withandroid:label=””
) and now correctly sets the title to an empty string. This was previously released in Navigation 2.3.0-alpha04 . ( b/148679860 ) - The
navigation-common-ktx
ProGuard rules now correctly only keep theNavArgs
classes that are used rather than allNavArgs
instances. This was previously released in Navigation 2.3.0-alpha03 . ( b/150213558
Dependency updates
- Navigation now depends on Fragment
1.2.4
. ( aosp/1277325 )
Version 2.2.1
Version 2.2.1
5 февраля 2020 г.
androidx.navigation:navigation-*:2.2.1
is released. Version 2.2.1 contains these commits .
Исправления ошибок
- Deep links without query parameters now correctly ignore any query parameters rather than appending them to trailing
{argument}
elements or not matching the deep link. ( b/147447512 ) - The
navigation-ui
ProGuard rules forDrawerArrowDrawable
have been updated to ensure thatandroid.enableJetifier=true
is not required. ( b/147610424 ) - The
navigation-common-ktx
module now has a unique manifest package name instead of sharing the same manifest package name asnavigation-runtime-ktx
. ( aosp/1141947 )
Dependency updates
- Navigation
2.2.1
now depends on Lifecycle ViewModel SavedState2.2.0
and Fragment1.2.1
.
Version 2.2.0
Version 2.2.0
January 22, 2020
androidx.navigation:navigation-*:2.2.0
is released. Version 2.2.0 contains these commits .
Important changes since 2.1.0
- NavBackStackEntry : You can now call
NavController.getBackStackEntry()
, passing in the ID of a destination or navigation graph on the back stack. The returnedNavBackStackEntry
provides a Navigation-drivenLifecycleOwner
,ViewModelStoreOwner
(the same returned byNavController.getViewModelStoreOwner()
), andSavedStateRegistryOwner
, in addition to providing the arguments used to start that destination. - Lifecycle ViewModel SavedState Integration :
SavedStateViewModelFactory
is now the default factory used when usingby navGraphViewModels()
or theViewModelProvider
constructor with aViewModelStoreOwner
returned byNavController.getBackStackEntry()
orNavController.getViewModelStoreOwner()
. - Query Parameter Support for Deep Links : Deep links with query parameters now support reordered query parameters; arguments that have a default value or are nullable are now optional when matching deep links.
- Improved Animation Support :
NavHostFragment
now usesFragmentContainerView
from Fragment 1.2.0 , fixing animation z-ordering issues and window insets dispatching to Fragments.
Version 2.2.0-rc04
18 декабря 2019 г.
androidx.navigation:navigation-*:2.2.0-rc04
is released. Version 2.2.0-rc04 contains these commits .
Исправления ошибок
- Adjusted the default fade animations used by
navigation-ui
to match the adjusted fade animations in Fragment1.2.0-rc04
. ( b/145769814 )
Version 2.2.0-rc03
4 декабря 2019 г.
androidx.navigation:navigation-*:2.2.0-rc03
is released. Version 2.2.0-rc03 contains these commits .
Исправления ошибок
- Fixed an issue with deep link parsing when using query parameters and an argument as the last part of the path that prevented more than one character of the final path argument from being parsed. ( b/144554689 )
- Fixed an issue with deep link parsing where optional parameters would receive
"@null"
instead ofnull
. ( b/141613546 ) -
NavHostFragment
now correctly restores the graph after a configuration change when used withFragmentContainerView
. ( b/143752103 )
Dependency changes
- Navigation now depends on Lifecycle
2.2.0-rc03
, Lifecycle ViewModel SavedState1.0.0-rc03
, Activity1.1.0-rc03
, and Fragment1.2.0-rc03
where appropriate.
Version 2.2.0-rc02
7 ноября 2019 г.
androidx.navigation:navigation-*:2.2.0-rc02
is released. Version 2.2.0-rc02 contains these commits .
Dependency changes
- Navigation now depends on androidx.lifecycle
2.2.0-rc02
.
Version 2.2.0-rc01
23 октября 2019 г.
androidx.navigation:navigation-*:2.2.0-rc01
is released with no changes since 2.2.0-beta01
. Version 2.2.0-rc01 contains these commits .
Version 2.2.0-beta01
9 октября 2019 г.
androidx.navigation:navigation-*:2.2.0-beta01
is released. Version 2.2.0-beta01 contains these commits .
Новые возможности
-
NavDestination
and its subclasses now overridetoString()
to provide more helpful information when debugging. ( b/141264986 )
Поведение изменяется
- Extra query parameters are now ignored when matching deep links rather than causing the match to fail. ( b/141482822 )
Исправления ошибок
- Fixed an issue where arguments in a deep link's path would be ignored if query parameters were also specified. ( b/141505755 )
- The
navArgs()
Kotlin extension onActivity
now has a better error message when there are no extras. ( b/141408999 ) - Safe Args generated
Directions
Java classes now contain default values. ( b/141099045 ) - Safe Args generated
Args
Java classes now contain default values. ( b/140123727 ) - When using a
Toolbar
,NavigationUI
no longer animates the text change when moving between two top level destinations. ( b/140848160 )
Version 2.2.0-alpha03
18 сентября 2019 г.
androidx.navigation:navigation-*:2.2.0-alpha03
is released. Version 2.2.0-alpha03 contains these commits .
Поведение изменяется
- Calling
setViewModelStore()
after callingsetGraph
now results in anIllegalStateException
. This should always be set by theNavHost
as part of the initial setup to ensure that allNavBackStackEntry
instances have a consistent storage forViewModel
instances. ( aosp/1111821 )
Исправления ошибок
- Fixed a
ConcurrentModificationException
when usingViewModel
instances attached to multiple different navigation graph scopedViewModelStore
instances. ( aosp/1112257 )
Version 2.2.0-alpha02
5 сентября 2019 г.
androidx.navigation:navigation-*:2.2.0-alpha02
is released. Коммиты, включенные в эту версию, можно найти здесь .
Новые возможности
- Deep links with query parameters now support reordered query parameters; arguments that have a default value or are nullable are now optional when matching deep links. ( b/133273839 )
- You can now call
NavController.getBackStackEntry()
, passing in the ID of a destination or navigation graph on the back stack. The returnedNavBackStackEntry
provides a Navigation-drivenLifecycleOwner
,ViewModelStoreOwner
(the same returned byNavController.getViewModelStoreOwner()
), andSavedStateRegistryOwner
, in addition to providing the arguments used to start that destination. ( aosp/1101691 , aosp/1101710 )
Исправления ошибок
- Fixed an issue where adding a
NavHostFragment
toViewPager2
failed with anIllegalArgumentException
. ( b/133640271 ) -
NavInflater
now avoids callinggetResourceName()
unnecessarily, speeding up inflation time by up to 40%. ( b/139213740 )
Version 2.2.0-alpha01
7 августа 2019 г.
androidx.navigation:navigation-*:2.2.0-alpha01
is released. Коммиты, включенные в эту версию, можно найти здесь .
Новые возможности
-
SavedStateViewModelFactory
is now the default factory used when usingby navGraphViewModels()
or theViewModelProvider
constructor with aViewModelStoreOwner
returned byNavController.getViewModelStoreOwner()
. ( b/135716331 )
Изменения API
- From Navigation
2.1.0-rc01
: The deprecatedgetViewModelStore()
API onNavController
introduced in2.1.0-alpha02
has been removed. ( aosp/1091021 )
Исправления ошибок
-
NavHostFragment
now usesFragmentContainerView
, fixing animation z-ordering issues and window insets dispatching to Fragments. ( b/137310379 )
Version 2.1.0
Version 2.1.0
5 сентября 2019 г.
androidx.navigation:navigation-*:2.1.0
is released. Коммиты, включенные в эту версию, можно найти здесь .
Important changes since 2.0.0
- Scoping ViewModels to a navigation graph : You can now create ViewModels that are scoped at the navigation graph level using the
by navGraphViewModels()
property delegate for Kotlin users using the-ktx
libraries or by using thegetViewModelStoreOwner()
API added toNavController
. See Share UI-related data between destinations for more information. - Dialog destinations : You can now create
<dialog>
destinations that will show aDialogFragment
when younavigate
to them.NavHostFragment
supports dialog destinations by default. See Create a destination from a DialogFragment for more information. - Navigating by Uri : You can now
navigate
using aUri
, which uses the<deepLink>
you've added to a destination to navigate there. See Navigate using Uri for more information. - NavHostController : APIs used specifically for constructing a custom
NavHost
have been moved toNavHostController
, allowing implementations to connect theirNavController
to the hostingLifecycleOwner
,OnBackPressedDispatcher
, andViewModelStore
.
Version 2.1.0-rc01
7 августа 2019 г.
androidx.navigation:navigation-*:2.1.0-rc01
is released. Коммиты, включенные в эту версию, можно найти здесь .
Изменения API
- The deprecated
getViewModelStore()
API onNavController
introduced in2.1.0-alpha02
has been removed. ( aosp/1091021 )
Version 2.1.0-beta02
19 июля 2019 г.
androidx.navigation:*:2.1.0-beta02
is released. Коммиты, включенные в эту версию, можно найти здесь .
Исправления ошибок
- Removed unintentional jacoco dependency that was introduced in
2.1.0-beta01
. ( b/137782950 )
Version 2.1.0-beta01
17 июля 2019 г.
androidx.navigation:*:2.1.0-beta01
is released. Коммиты, включенные в эту версию, можно найти здесь .
Новые возможности
-
NavigationUI
now animates the removal of the Up button when usingsetupWithNavController()
with aToolbar
orCollapsingToolbarLayout
. ( b/131403621 )
Исправления ошибок
- Fixed a timing issue when using multiple NavHostFragments with the same container with
findNavController()
. ( b/136021571 )
Version 2.1.0-alpha06
2 июля 2019 г.
androidx.navigation:*:2.1.0-alpha06
is released. Коммиты, включенные в эту версию, можно найти здесь .
Новые возможности
- The
app:navGraph
attribute used by NavHostFragment has now been moved to thenavigation-runtime
artifact. Custom navigators that can be added via XML should use this attribute to gain integration with the Navigation Editor's Host panel. ( b/133880955 )
Изменения API
- The
getViewModelStore()
API onNavController
has been deprecated in favor of the newgetViewModelStoreOwner()
method that returns aViewModelStoreOwner
. ( aosp/987010 ) - The implementation of floating window destinations, such as
<dialog>
destinations, has been generalized into a marker interface,FloatingWindow
, that all<dialog>
destinations now implement. NavigationUI methods for interacting with the top app bar now ignoreFloatingWindow
destinations. ( b/133600763 )
Поведение изменяется
- Navigation now correctly keeps its state in sync with what is seen on the screen when using a
<dialog>
destination. As a consequence, Navigation now automatically pops<dialog>
destinations when you navigate to a non-dialog and non-activity destination, such as a<fragment>
destination. ( b/134089818 )
Исправления ошибок
- Navigation now suppresses the animation that occurs when recreating the activity when handling a deep link, fixing a visual flash. ( b/130362979 )
- Fixed a bug where the Navigation back stack would be out of sync when popping a Fragment as the initial fragment is being added. ( b/133832218 )
Version 2.1.0-alpha05
5 июня 2019 г.
androidx.navigation:*:2.1.0-alpha05
is released. Коммиты, включенные в эту версию, можно найти здесь .
Изменения API
- Host related APIs on
NavController
have been renamed and moved to a new subclass ofNavController
,NavHostController
. ( aosp/966091 ) - The
NavController
setHostOnBackPressedDispatcherOwner()
method has been replaced withNavHostController
'ssetOnBackPressedDispatcher()
method and now requires that you callsetLifecycleOwner()
prior to calling it. ( aosp/965409 ) -
NavHostController
now contains aenableOnBackPressed(boolean)
method that replaces theNavHostOnBackPressedManager
class that was previously returned bysetHostOnBackPressedDispatcherOwner()
. ( aosp/966091 )
Исправления ошибок
- Fixed an issue where the back stack was not correct after navigating by URI. ( b/132509387 )
- Deep links automatically handled by NavController now only trigger once. ( b/132754763 )
Version 2.1.0-alpha04
May 16, 2019
androidx.navigation:*:2.1.0-alpha04
is released. Коммиты, включенные в эту версию, можно найти здесь .
Исправления ошибок
-
NavHostFragment
correctly respectsapp:defaultNavHost
when intercepting the system Back button events, fixing a regression in Navigation2.1.0-alpha03
. b/132077777 -
DialogFragmentNavigator
now correctly handlespopBackStack()
andnavigateUp()
operations. b/132576764 - Fixed an
IllegalStateException: unknown destination during restore
issue when repeatedly navigating between nested graphs. b/131733658
Version 2.1.0-alpha03
7 мая 2019 г.
androidx.navigation:*:2.1.0-alpha03
is released. Коммиты, включенные в эту версию, можно найти здесь .
Известные проблемы
- NavHostFragment continues to intercept the system Back button despite using
app:defaultNavHost="false"
b/132077777
Новые возможности
- You can now create
<dialog>
destinations that will show aDialogFragment
when younavigate
to them.NavHostFragment
supports dialog destinations by default. b/80267254 - In addition to calling
navigate
with a resource id or aNavDirections
instance, you can now navigate via aUri
, which uses the<deepLink>
you've added to a destination to navigate to the correct destination. b/110412864
Поведение изменяется
- The default animations provided by NavigationUI have been sped up from 400ms to 220ms to match the default animation speed of activities and fragments. b/130055522
Изменения API
- The
createFragmentNavigator()
method ofNavHostFragment
has been deprecated and its functionality moved to the newonCreateNavController()
method to make it more clear that this is the correct entry point of adding custom Navigators when subclassingNavHostFragment
. b/122802849 - A
hasDeepLink()
method has been added toNavDestination
to allow you to check if a givenUri
can be handled by that destination or, in the case of aNavGraph
, any destination in the navigation graph. b/117437718
Исправления ошибок
- Default arguments are now correctly passed to
OnDestinationChangedListener
instances. b/130630686 -
NavHostFragment
now intercepts system Back events using theOnBackPressedDispatcher
, fixing an issue when doing conditional navigation in Fragment lifecycle methods upon returning to a Fragment. b/111598096 - For Safe Args, an
android:defaultValue=”@null”
with an unspecifiedapp:argType
is now properly inferred as astring
argument. b/129629192
Version 2.1.0-alpha02
3 апреля 2019 г.
androidx.navigation:*:2.1.0-alpha02
is released. Коммиты, включенные в эту версию, можно найти здесь .
Новые возможности
- You can now create ViewModels that are scoped at a navigation graph level via the
by navGraphViewModels()
property delegate for Kotlin users or by using thegetViewModelStore()
API added toNavController
. b/111614463
Изменения API
- You can now add an
app:targetPackage
to an<activity>
destination to limit the matching package name. It supportsapp:targetPackage="${applicationId}"
for restricting the package to your own application id. b/110975456
Исправления ошибок
- The
android:name
for<activity>
destinations is no longer parsed into a Class at inflation time, preventing ClassNotFoundExceptions when using dynamic features. b/124538597
Version 2.1.0-alpha01
March 19, 2019
This is the first alpha release of Navigation 2.1.0
.
Dependency changes
- Navigation now depends on
androidx.core:core:1.0.1
andandroidx.fragment:fragment:1.1.0-alpha05
. This release also removes the dependency onandroidx.legacy:legacy-support-core-utils:1.0.0
. b/128632612
Изменения API
- A new
Navigation.createNavigateOnClickListener(NavDirections)
method has been added as an alternative to creating a click listener with a resource ID and Bundle. b/127631752 -
FragmentNavigator.instantiateFragment
is now deprecated. The default implementation now usesFragmentFactory
to instantiate Fragments. b/119054429
Исправления ошибок
- Navigation no longer sends a null
Bundle
when there are arguments attached to a destination, fixing an issue when usingandroid:defaultValue="@null"
. b/128531879 - Safe Args now depends on KotlinPoet 1.1.0, fixing an issue with extremely long package names. b/123654948
Версия 2.0.0
Версия 2.0.0
March 14, 2019
Navigation 2.0.0
is released with no changes from 2.0.0-rc02
.
Version 2.0.0-rc02
March 6, 2019
Navigation 2.0.0-rc02 provides new artifacts with the androidx.navigation
group ID and changes its dependencies to the AndroidX equivalents.
The behavior of 2.0.0-rc02 is identical to behavior to Navigation 1.0.0-rc02 and no changes to your code should be required to update from 1.0.0-rc02 besides updating your dependencies to match the new dependencies .
Your project must have migrated to AndroidX to use 2.X releases of Navigation. Navigation 1.0 stable will be the last release using the Support Library dependencies; all future development beyond 1.0 will be based on AndroidX and build upon the 2.0 stable release.
Pre-AndroidX Dependencies
For the pre-AndroidX versions of Navigation, include these dependencies:
dependencies {
def nav_version = "1.0.0"
implementation "android.arch.navigation:navigation-fragment:$nav_version" // For Kotlin use navigation-fragment-ktx
implementation "android.arch.navigation:navigation-ui:$nav_version" // For Kotlin use navigation-ui-ktx
}
For Safe args , add the following classpath in your top level build.gradle
file
buildscript {
repositories {
google()
}
dependencies {
classpath "android.arch.navigation:navigation-safe-args-gradle-plugin:1.0.0"
}
}
Версия 1.0.0
Версия 1.0.0
March 14, 2019
Navigation 1.0.0
is released with no changes from 1.0.0-rc02
.
Version 1.0.0-rc02
February 26, 2019
This is the second release candidate for Navigation's 1.0.0 stable release. This release contains a number of bug fixes.
Исправления ошибок
- Fixed an issue where
popBackStack()
would be ignored if the root graph did not have an ID b/126251695 -
navigateUp()
now correctly handles navigating back to your app's task when called after handling a deep link withoutFLAG_ACTIVITY_NEW_TASK
b/126082008 - Fixed an issue with
ActivityNavigator.applyPopAnimationsToPendingTransition
not applying the correct pop exit animation b/126237567 - Kotlin code generated by Safe Args now properly escapes Kotlin keywords such as
in
andfun
in the package name associated with theR
class. b/126020455
Версия 1.0.0-rc01
February 21, 2019
This is a release candidate for Navigation's 1.0.0 stable release. This release contains one bug fix.
Исправления ошибок
- Fixed an issue when using Fragments and
singleTop
navigation operations b/124294805
Version 1.0.0-beta02
12 февраля 2019 г.
This release includes a number of minor improvements and important bug fixes.
Новые возможности
- You can now use
0
as anandroid:defaultValue
forreference
arguments. b/124248602
Поведение изменяется
- Exact deep link matches are now prioritized over deep links with
.*
or argument matches. b/123969518
Исправления ошибок
-
popBackStack()
andnavigateUp
now correctly returnfalse
when popping the last destination on the back stack, fixing a regression introduced in1.0.0-beta01
. b/123933201 - Navigation now correctly sets the
ClassLoader
during restoration of saved instance state, avoiding issues when using custom classes inNavigator
saved state or in arguments sent to aNavDestination
. b/123893858 - Safe Args generated NavArgs classes no longer crash when restoring a
Parcelable[]
argument from saved instance state. b/123963545 - Safe Args now properly cleans up unnecessary generated Kotlin classes. b/124120883
Версия 1.0.0-бета01
February 4, 2019
This is the first beta release of Navigation; moving forward, the Navigation API is expected to stay stable until the next version unless there is a critical problem. This release contains some bug fixes and behavior changes.
Поведение изменяется
- Navigation now ensures that argument default values are treated identically at runtime and through Safe Args. As a consequence, only arguments with an
app:argType="reference"
can have a default value point to another resource (for example,@color/colorPrimary
). Attempting to use a reference default value with a differentapp:argType
will result in an exception when parsing the navigation XML. b/123551990 - Safe Args now depends on Android Gradle Plugin 3.3.0 aosp/888413
- Safe Args now depends on Kotlin 1.3.20 aosp/888414
Исправления ошибок
- Safe Args can now be used in library and feature modules on all versions of the Android Gradle Plugin. b/121304903
- Fixed a regression that would cause a single
popBackStack()
operation to pop all copies of a destination off the top of the back stack, rather than just a single destination at a time. b/123552990 - Fixed an issue where the
FragmentNavigator
state would desynchronize with theNavController
's state, causing anIllegalStateException
when attempting to restore the back stack. b/123803044 - Fixed an issue where the
NavigationUI
handled back arrow would not appear when using ProGuard with obfuscation. b/123449431 - The code generated by Safe Args now properly handles using an
app:argType
pointing to a static inner class in the format.OuterClass$InnerClass
. b/123736741 - The Java code generated by Safe Args now properly handles global actions and deeply nested destinations. b/123347762
Версия 1.0.0-альфа11
January 23, 2019
This is a hotfix release of 1.0.0-alpha10
that fixes an issue with Safe Args.
Исправления ошибок
- Fixes an issue where Safe Args would fail to import the Directions class associated with global actions. b/123307342
Версия 1.0.0-альфа10
January 23, 2019
Известные проблемы
- Safe Args fails to import the Directions class associated with global actions. b/123307342
This release contains breaking API changes; please see the Breaking Changes section below.
Новые возможности
- Kotlin users can now use the
by navArgs()
property delegate to lazily get a reference to a Safe Args generatedNavArgs
class in anActivity
orFragment
. b/122603367 - Safe Args now allows you to generate Kotlin code by applying the
androidx.navigation.safeargs.kotlin
plugin. The Kotlin code is built specifically for Kotlin only modules, using default arguments and immutable classes over the builder pattern that is still available via the previousandroidx.navigation.safeargs
plugin. b/110263087
Изменения поведения
- Matching deep links are now biased towards the deep link that has the most matching arguments. b/118393029
- Calling
setGraph()
on aNavController
will now reset the back stack. b/111450672 - Unknown deep links no longer throw an
IllegalStateException
, but are ignored, fixing issues with nested or multipleNavHostFragment
s. b/121340440
Критические изменения
- The
NavOptions.applyPopAnimationsToPendingTransition()
method for applying pop animations to an Activity has been moved toActivityNavigator
. b/122413117 - Safe Args now avoids duplicating identical classes for actions without arguments. The return type for no argument methods in generated NavDirections classes is now
NavDirections
. b/123233147 - Safe Args generated Directions classes no longer have a public constructor - you should only be interacting with the generated static methods. b/123031660
- Safe Args generated
NavDirections
classes no longer have a public constructor - they should only be generated via the static methods in the generated Directions classes. b/122963206 - The returned
Bundle
fromNavDirections
'getArguments()
is now marked as@NonNull
rather than@Nullable
. b/123243957
Исправления ошибок
-
NavDeepLinkBuilder
now correctly handles multiple simultaneousPendingIntent
s to the same destination by using the arguments you pass in to determine the uniqueness. b/120042732 -
NavController
now correctly handlespopBackStack()
operations when using a nestedNavHostFragment
or other child Fragments with a back stack. b/122770335 -
NavigationUI
now correctly sets the content description of the Up button. b/120395362 - Safe Args generated Directions classes now correctly handle global actions that have the same id as an action on a destination. b/122962504
- Safe Args generated
NavDirections
classes now correctly have equalhashCode()
values whenequals()
would return true. b/123043662 -
FragmentNavigator
now throws a better error message if you attempt to do customFragmentTransactions
on theNavHostFragment
'sFragmentManager
. You should always usegetChildFragmentManager()
. b/112927148
Версия 1.0.0-альфа09
December 18, 2018
This release contains breaking API changes; please see the Breaking Changes section below.
We have chosen not to continue development of the android.arch.navigation:navigation-testing
artifact. While it has proven helpful for internal testing of NavController
, we strongly recommend alternate testing strategies, such as mocking the NavController
instance in order to verify that the correct navigate()
calls are being done. This approach is discussed in detail in the Single Activity talk at AndroidDevSummit 2018 and we'll be working on additional documentation specifically around testing with Navigation.
Новые возможности
-
MenuItem
s withmenuCategory="secondary"
will no longer pop the back stack when used withNavigationUI
methods. b/120104424 -
AppBarConfiguration
now allows you to set a fallbackOnNavigateUpListener
instance which will be called whennavController.navigateUp()
returnsfalse
. b/79993862 b/120690961
Критические изменения
- When using an
<argument>
with anargType="reference"
, Navigation no longer parses the reference, instead providing the raw resource ID itself. b/111736515 -
onNavDestinationSelected()
now pops back to the start destination of your navigation graph by default, making them consistent with thesetup
methods. AddmenuCategory="secondary"
to yourMenuItem
to avoid popping the back stack. aosp/852869 - The
fromBundle()
methods of generatedArgs
classes now take a non-nullBundle
instead of a nullableBundle
aosp/845616
Исправления ошибок
- Arguments are now properly parsed from deep links as the correct
argType
instead of always as strings b/110273284 - Navigation now correctly exports its public resources b/121059552
- Safe Args is now compatible with Android Gradle Plugin 3.4 Canary 4 and higher b/119662045
Версия 1.0.0-альфа08
December 6, 2018
This release contains breaking API changes; please see the Breaking Changes section below.
Новые возможности
- Destination labels, when used with
NavigationUI
methods, will now automatically replace{argName}
instances in yourandroid:label
with the correct argument b/80267266 - Navigation now depends on Support Library 28.0.0 b/120293333
Критические изменения
-
OnNavigatedListener
has been renamed toOnDestinationChangedListener
b/118670572 -
OnDestinationChangedListener
now also passes theBundle
of arguments aosp/837142 - The
app:clearTask
andapp:launchDocument
attributes and their associated methods have been removed. Useapp:popUpTo
with the root of your graph to remove all destinations from your back stack. b/119628354 -
ActivityNavigator.Extras
now uses aBuilder
pattern and adds the ability to set anyIntent.FLAG_ACTIVITY_
flags aosp/828140 -
NavController.onHandleDeepLink
has been renamed tohandleDeepLink
aosp/836063 - Many classes and methods not meant for subclassing, such as
NavOptions
,NavInflater
,NavDeepLinkBuilder
, andAppBarConfiguration
, have been madefinal
aosp/835681 - The deprecated
NavHostFragment.setGraph()
method has been removed aosp/835684 - The deprecated
NavigationUI.navigateUp(DrawerLayout, NavController)
method has been removed. aosp/835684 - Fragment creation has been moved to
FragmentNavigator
, making it easier to delegate Fragment creation to aFragmentFactory
. b/119054429 - The constructor for
NavGraphNavigator
no longer takes aContext
aosp/835340 - NavigatorProvider is now a class, rather than an interface. The
NavigatorProvider
returned bygetNavigatorProvider()
has not changed its functionality. aosp/830660 -
NavDestination.navigate()
has been removed. Callnavigate()
on theNavigator
instead. aosp/830663 - Significant refactoring of
Navigator
, removing the need forOnNavigatorNavigatedListener
and instead havingnavigate
return theNavDestination
that was navigated to. -
Navigator
instances can no longer send pop events to theNavController
. Consider using aOnBackPressedCallback
to intercept back button presses and callnavController.popBackStack()
. aosp/833716
Исправления ошибок
-
popUpTo
now works consistently when the destination is a<navigation>
element b/116831650 - Fixed a number of bugs that resulted in an
IllegalArgumentException
when using nested graphs b/118713731 b/113611083 b/113346925 b/113305559 - The
dataPattern
attribute of<activity>
destinations will now populate arguments from non-String arguments by callingtoString()
b/120161365
Safe Args
- Safe Args supports Serializable objects, including Enum values. Enum types can set a default value by using the enum literal without the class name (eg
app:defaultValue="READ"
) b/111316353 - Safe Args supports arrays of all supported types b/111487504
- Safe Args now ignores subfolders of resource directories b/117893516
- Safe Args adds
@Override
annotations where appropriate b/117145301
Версия 1.0.0-альфа07
October 29, 2018
Новые возможности
- A new AppBarConfiguration class allows you to customize which destinations are considered top-level destinations. See the updated documentation for details. b/117333663
- You can now pass arguments to the start destination of your graph b/110300470
- Deep links now support custom schemes with periods, hyphens, and plus signs. b/112806402
Критические изменения
- The
navigation-testing-ktx
module has been folded into thenavigation-testing artifact
and will no longer be published. - The
navigation-testing
artifact now has a dependency on the Kotlin standard library. The API has been changed to be more consistent with Kotlin conventions, but you can continue to use it for tests written in Java. - Metadata manifest registered navigation graphs are no longer supported. b/118355937
- Actions can no longer be attached to <activity> destinations. aosp/785539
Исправления ошибок
- Deep links now correctly parse query parameters. b/110057514
- Activity destinations now correctly apply all enter and exit animations. b/117145284
- Fixed crash that occurs after configuration changes when using custom Navigators. b/110763345
Safe Args
- Safe args now have a fixed dependency on Android Gradle Plugin 3.2.1. b/113167627
- Directions can now be generated for inner classes. b/117407555
- Fixed an issue with generating Directions to an <include> graph. b/116542123
Версия 1.0.0-альфа06
September 20, 2018
Новые возможности
- Shared Element Transitions for Fragment and Activity destinations are now supported b/79665225 . For more information, see Implement navigation with the Navigation Architecture Component
- Selecting an item in
NavigationView
will now close any containing bottom sheet b/112158843
Изменения API
- Breaking Change: The Navigator
navigate()
method now takes aNavigator.Extras
parameter. - NavController's
getGraph()
method is nowNonNull
b/112243286
Исправления ошибок
-
NavigationUI.setupWithNavController()
no longer leaks views if used with views from individual destinations b/111961977 - Navigator
onSaveState()
is now only called once b/112627079
Safe Args
- Navigation destination Directions classes now extend their parent's Directions class if it exists b/79871405
- Directions and Args classes now have a useful
toString()
implementation b/111843389
Версия 1.0.0-альфа05
August 10, 2018
Исправления ошибок
- Fix a bug which cause incorrect backstack behavior. b/111907708
- Fix a bug in
equals()
of Generated Args classes. b/111450897 - Fix a build failure in Safe Args. b/109409713
- Fix a conversion from resource identifiers to java names b/111602491
- Fix error messages about nullability in Safe Args plugin.
- Add missing nullability annotations.
Версия 1.0.0-альфа04
July 19, 2018
Navigation 1.0.0-alpha04
and the associated Safe Args gradle plugin contains a number of API changes, behavior changes, and bug fixes.
API / Behavior Changes
- NavHostFragment will always set the current Fragment as the primary navigation fragment, ensuring that child fragment managers are popped before the outer NavController is popped b/111345778
Safe Args
- Breaking Change:
app:type
has been changed toapp:argType
to avoid conflicts with other libraries such as ConstraintLayout 2.0.0-alpha1 b/111110548 - Error messages from Safe Args are now clickable b/111534438
- Args classes now confirms that
NonNull
attributes are actually not null b/111451769 - Additional
NonNull
annotations have been added to NavDirections and Args generated classes b/111455455 b/111455456
Исправления ошибок
- Fixed an issue with the system back button after deep linking to a fragment destination b/111515685
Версия 1.0.0-альфа03
July 12, 2018
Navigation 1.0.0-alpha03
and the associated Safe Args gradle plugin contains a number of API changes, behavior changes, and bug fixes.
API / Behavior Changes
- A NavigationUI.setupWithNavController method for Toolbar has been added b/109868820
- A NavigationUI.setupWithNavController method for CollapsingToolbarLayout has been added b/110887183
- popBackStack() now returns false when the back stack is empty or when the given destination ID is not in the back stack b/110893637
- FragmentNavigator now ignores navigation operations after FragmentManager has saved state, avoiding “Can not perform this action after onSaveInstanceState” exceptions b/110987825
Safe Args
- Breaking Change: Non-alphanumeric characters in action and argument names will be replaced by camel casing in the respective NavDirections method names
- Eg
DemoController.index
will becomesetDemoControllerIndex
b/79995048 - Eg
action_show_settings
will becomeactionShowSettings
b/79642240
- Eg
- Breaking Change: Arguments are now considered non-null by default. To allow null values on string and parcelable arguments, add
app:nullable="true"
b/79642307 - You can now use
app:type="long"
with defaultValues in the form of “123L” b/79563966 - Parcelable arguments are now supported, using a fully qualified class name for
app:type
. The only default value supported is"@null"
b/79563966 - Args classes now implement
equals()
andhashCode()
b/79642246 - The Safe Args plugin can now be applied to library projects b/80036553
- The Safe Args plugin can now be applied to feature projects b/110011752
Исправления ошибок
- Fixed issues when navigating during Fragment lifecycle methods b/109916080
- Fixed issues when navigating through nested graphs multiple times b/110178671
- Fixed issues when using
setPopUpTo
with the first destination in the graph b/109909461 - Fixed issue where all
app:defaultValue
values were being passed as Strings b/110710788 - aapt2 bundled with Android Gradle Plugin 3.2 Beta 01 now adds keep rules for every
android:name
attribute in Navigation XML files b/79874119 - Fixed memory leak when replacing the default FragmentNavigator b/110900142
Версия 1.0.0-альфа02
June 7, 2018
Изменения поведения
FragmentNavigator
now usessetReorderingAllowed(true)
. b/109826220Navigation now URLDecodes arguments parsed from deep links URLs. b/79982454
Исправления ошибок
Fixed an
IllegalStateException
when calling navigate from Fragment lifecycle methods. b/79632233Navigation now depends on Support Library 27.1.1 to fix flickering when using animations. b/80160903
Fixed an
IllegalArgumentException
when using defaultNavHost="true" as a child fragment. b/79656847Fixed a
StackOverflowError
when using NavDeepLinkBuilder. b/109653065Fixed an
IllegalArgumentException
when navigating back to a nested graph. b/80453447Fixed an issue with overlapping Fragments when using
launchSingleTop
. b/79407969Navigation now builds the correct synthetic back stack for nested graphs. b/79734195
NavigationUI will now highlight the correct item when using a nested graph as a
MenuItem
. b/109675998
Изменения API
The
clearTask
attribute for actions and the associated API inNavOptions
has been deprecated. b/80338878The
launchDocument
attribute for actions and the associated API inNavOptions
has been deprecated. b/109806636
Версия 1.0.0-альфа01
May 8, 2018
Navigation provides a framework for building in-app navigation. This initial release is 1.0.0-alpha01
.