Переходы между экранами
Перемещайтесь вперёд и назад между пунктами назначения
«Переходы между экранами» — бесплатный урок Android Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Android Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Android Academy содержит 4 уроков всего.
Движение вперёд
После настройки NavHost переход на другой экран выполняется вызовом navigate у NavController с указанием маршрута назначения.
navController.navigate("details")Запуск из кнопки
Переход обычно выполняется в обратном вызове, например в onClick кнопки.
Button(onClick = { navController.navigate("details") }) {
Text("Open details")
}Стек возврата
Каждый вызов navigate помещает новое назначение в стек возврата. Системная кнопка «Назад» автоматически извлекает его из стека и возвращает на предыдущий экран.
popBackStack
Чтобы программно вернуться назад, например из пользовательской кнопки «Вверх», вызовите popBackStack. Он удаляет текущее назначение и возвращает к предыдущему.
navController.popBackStack()navigateUp
navigateUp() работает похожим образом и подходит для стрелки «Вверх» на панели инструментов. Он учитывает иерархию навигации.
navController.navigateUp()Предотвращение дублирования назначений
Если быстро дважды нажать кнопку, один и тот же экран может добавиться в стек дважды. Используйте launchSingleTop = true, чтобы не помещать дубликаты назначения в стек.
navController.navigate("details") {
launchSingleTop = true
}popUpTo
popUpTo очищает часть стека возврата во время навигации. Это полезно после входа в систему: перейдите на главный экран и удалите экран входа, чтобы кнопка «Назад» не возвращала к нему.
navController.navigate("home") {
popUpTo("login") { inclusive = true }
}inclusive
inclusive = true означает, что цель popUpTo также удаляется. При inclusive = false извлечение останавливается непосредственно перед ней.
Независимые экраны
Вместо передачи всего NavController на каждый экран передавайте лямбда-выражения. Экран вызывает onOpenDetails() и не знает о внутренних деталях навигации.
@Composable
fun HomeScreen(onOpenDetails: () -> Unit) {
Button(onClick = onOpenDetails) { Text("Details") }
}Подключение лямбда-выражения
NavHost связывает лямбда-выражение с настоящим вызовом навигации, благодаря чему логика навигации находится в одном месте.
composable("home") {
HomeScreen(onOpenDetails = {
navController.navigate("details")
})
}Соберём всё вместе
Главный экран переходит к экрану сведений, а экран сведений возвращается назад с помощью стрелки «Вверх».
composable("home") {
HomeScreen(onOpenDetails = { navController.navigate("details") })
}
composable("details") {
DetailsScreen(onBack = { navController.popBackStack() })
}Быстрая проверка
Какой вызов программно возвращает пользователя на предыдущий экран?
Повторение
Навигация:
navigate("route")помещает назначение в стек.popBackStack()/navigateUp()выполняют возврат.- Используйте
launchSingleTopиpopUpTo { inclusive }, чтобы управлять стеком. - Передавайте лямбда-выражения, а не контроллер, чтобы экраны оставались повторно используемыми.
Часто задаваемые вопросы
Урок «Переходы между экранами» бесплатный?
Да — полный текст урока «Переходы между экранами» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Android Academy, подпишись на CoddyKit PRO. Курс Android Academy содержит 4 уроков всего.
Чему я научусь в уроке «Переходы между экранами»?
Перемещайтесь вперёд и назад между пунктами назначения Ты практикуешь Android Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Android Academy?
Предыдущий опыт не требуется. Android Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Переходы между экранами»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Android Academy?
Да. Каждый урок Android Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Настройка NavHost
- Переходы между экранами
- Передача аргументов
- Нижняя навигация