Класс NavBackStackEntry
Класс NavBackStackEntry - одна запись
в стопке навигации: какой маршрут открыт
и какие аргументы к нему пришли.
Пакет аргументов лежит в свойстве
arguments типа SavedStateHandle
или Bundle в зависимости от API.
В composable-маршруте entry часто приходит
параметром лямбды у
composable.
Синтаксис
composable("details") { entry ->
val args = entry.arguments
}
Пример
Давайте прочитаем строковый аргумент на экране details:
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.material3.Text
import androidx.navigation.NavType
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import androidx.navigation.navArgument
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(
route = "details/{code}",
arguments = listOf(
navArgument("code") {
type = NavType.StringType
},
),
) { entry ->
val code = entry.arguments?.getString("code")
Text(text = code ?: "12345")
}
}
}
}
}
На экране details текст возьмётся из arguments записи стопки для маршрута с параметром.
Пример
Давайте перейдём на details с аргументом в route:
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.NavType
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import androidx.navigation.navArgument
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/abcde") }) {
Text(text = "abcde")
}
}
composable(
route = "details/{code}",
arguments = listOf(
navArgument("code") {
type = NavType.StringType
},
),
) { entry ->
val code = entry.arguments?.getString("code")
Text(text = code ?: "12345")
}
}
}
}
}
После нажатия на экране details появится
текст "abcde" из arguments entry.
Смотрите также
-
класс
NavType,
которым задают тип аргумента маршрута -
метод
composable,
куда передают entry в лямбду экрана -
класс
NavController,
который ведёт стопку таких записей -
метод
navigate,
которым открывают entry с новым маршрутом