Функция NavHost
Функция NavHost рисует composable
для текущего маршрута в стопке навигации.
Контроллер передают в navController,
первый экран задают в startDestination,
маршруты описывают в лямбде с приёмником
NavGraphBuilder.
Синтаксис
NavHost(
navController = navController,
startDestination = "home",
) {
composable("home") { }
composable("details") { }
}
Параметры
| Параметр | Описание |
|---|---|
navController |
Контроллер навигации. Обычно его получают
через
rememberNavController.
Тип - NavHostController.
|
startDestination |
Строковый маршрут, с которого открывается граф при первом показе. |
builder |
Лямбда с приёмником NavGraphBuilder.
Внутри вызывают
composable
и другие методы построения графа.
|
Пример
Давайте соберём граф из двух маршрутов:
import android.os.Bundle
import androidx.activity.ComponentActivity
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") {
Text(text = "12345")
}
}
}
}
}
На экране появится маршрут "home"
с текстом "abcde", пока контроллер
не переключит destination.
Пример
Давайте перейдём с home на 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")
}
}
}
}
}
После нажатия NavHost покажет экран "details"
с текстом "12345".
Смотрите также
-
функция
rememberNavController,
которой создают контроллер для NavHost -
класс
NavGraphBuilder,
где описывают методы composable и navigation -
метод
navigate,
которым переключают текущий экран -
функция
BackHandler,
которой перехватывают кнопку «назад» на экране