Класс NavType
Класс NavType описывает тип
параметра в шаблоне route у
composable.
Значение передают в navArgument
в поле type.
Для строк и чисел берут готовые
константы StringType, IntType
и другие из таблицы ниже.
Синтаксис
navArgument("code") {
type = NavType.StringType
}
Значения
| Значение | Описание |
|---|---|
StringType |
Строковый сегмент маршрута без дополнительного преобразования. |
IntType |
Целое число из сегмента path. |
LongType |
Длинное целое из сегмента path. |
BoolType |
Логическое значение true или false в сегменте маршрута. |
FloatType |
Число с плавающей точкой из сегмента path. |
Пример
Давайте объявим строковый аргумент code:
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")
}
}
}
}
}
На экране home виден текст "abcde",
на details подставится аргумент из route.
Пример
Давайте перейдём на details с IntType:
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/12345") }) {
Text(text = "abcde")
}
}
composable(
route = "details/{id}",
arguments = listOf(
navArgument("id") {
type = NavType.IntType
},
),
) { entry ->
val id = entry.arguments?.getInt("id")
Text(text = id?.toString() ?: "12345")
}
}
}
}
}
На details текст станет "12345"
из целого аргумента маршрута.
Смотрите также
-
класс
NavBackStackEntry,
откуда читают распарсенные arguments -
метод
composable,
где задают navArgument с NavType -
метод
navigate,
которым передают значения в сегментах route -
класс
NavGraphBuilder,
внутри которого регистрируют маршрут