Класс NavOptionsBuilder
Класс NavOptionsBuilder - приёмник
лямбды во второй форме
navigate.
Внутри задают, как изменить стопку
при переходе: куда срезать историю,
нужен ли single top и сохранение state.
Главный метод для стопки -
popUpTo.
Синтаксис
navController.navigate("details") {
popUpTo("home") { inclusive = false }
}
Методы
| Метод | Описание |
|---|---|
popUpTo |
Удаляет записи стопки до указанного маршрута перед новым переходом. |
Пример
Давайте откроем details и срежем стопку до home:
import android.os.Bundle
import androidx.activity.ComponentActivity
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") {
popUpTo("home") { inclusive = false }
}
}) {
Text(text = "abcde")
}
}
composable("details") {
Text(text = "12345")
}
}
}
}
}
На экране details «назад» сразу выйдет за пределы home, потому что под ним не останется лишних записей.
Пример
Давайте включим inclusive и уберём home со стопки:
import android.os.Bundle
import androidx.activity.ComponentActivity
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") {
popUpTo("home") { inclusive = true }
}
}) {
Text(text = "abcde")
}
}
composable("details") {
Text(text = "12345")
}
}
}
}
}
После перехода на details в стопке
останется только этот экран с "12345".
Смотрите также
-
метод
popUpTo,
который подробно режет стопку -
метод
navigate,
куда передают лямбду NavOptionsBuilder -
метод
clearBackStack,
который чистит стопку отдельным вызовом -
метод
popBackStack,
которым возвращаются без новых опций