Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
255 of 502 menu
◀ ▶

Функция BackHandler

Функция BackHandler из пакета activity-compose перехватывает нажатие системной кнопки «назад», пока composable на экране. Включение задают в enabled, реакцию - в лямбде onBack. Это не класс OnBackPressedDispatcher из activity, а отдельная composable-функция для Compose.

Синтаксис

BackHandler(enabled = true) { onBackAction() }

Параметры

Параметр Описание
enabled Если true, перехват активен. Если false, нажатие уходит следующему обработчику в стопке.
onBack Лямбда без аргументов. Вызывается, когда пользователь нажал «назад» и перехват включён.

Пример

Давайте закроем верхний экран через popBackStack:

import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.BackHandler import androidx.activity.compose.setContent import androidx.compose.material3.Button import androidx.compose.material3.Text import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { val navController = rememberNavController() NavHost( navController = navController, startDestination = "home", ) { composable("home") { Button(onClick = { navController.navigate("details") }) { Text(text = "abcde") } } composable("details") { BackHandler { navController.popBackStack() } Text(text = "12345") } } } } }

На экране "details" кнопка «назад» вернёт на "home" с кнопкой "abcde".

Пример

Давайте временно отключим перехват:

import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.BackHandler import androidx.activity.compose.setContent import androidx.compose.material3.Text import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { val navController = rememberNavController() NavHost( navController = navController, startDestination = "home", ) { composable("home") { Text(text = "abcde") } composable("details") { BackHandler(enabled = false) { navController.popBackStack() } Text(text = "12345") } } } } }

На экране "details" «назад» обработает NavHost сам, без вызова лямбды в BackHandler.

Смотрите также

  • метод popBackStack,
    которым снимают верхний экран со стопки
  • метод navigateUp,
    который идёт назад по иерархии графа
  • функция NavHost,
    который сам обрабатывает «назад» между маршрутами
  • метод navigate,
    которым открывают следующий экран
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить