Метод navigate
Метод navigate класса
NavController
кладёт новый destination на верх стопки
и переключает NavHost на него.
Чаще всего передают строку route,
как у composable в графе.
Дополнительные флаги задают через
NavOptionsBuilder
во второй форме вызова.
Синтаксис
navController.navigate("details")
Параметры
| Параметр | Описание |
|---|---|
route |
Строковый маршрут из графа NavHost. Должен совпадать с route у composable или полным путём вложенного графа. |
Пример
Давайте откроем details по нажатию кнопки:
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") }) {
Text(text = "abcde")
}
}
composable("details") {
Text(text = "12345")
}
}
}
}
}
После нажатия на экране появится
текст "12345" на маршруте details.
Пример
Давайте перейдём на details с аргументом в пути:
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"
из сегмента маршрута после navigate.
Смотрите также
-
метод
popBackStack,
которым возвращаются с открытого маршрута -
класс
NavOptionsBuilder,
которым настраивают стопку при navigate -
метод
composable,
где регистрируют route для navigate -
функция
NavHost,
который рисует экран после navigate