Проблема
В моем приложении есть три вложенных навигационных графика: HomeGraph, ProfileGraph и MenuGraph. Я хочу добиться того, чтобы при переходе между этими графиками через BottomNavigationBar каждый из них должен сохранять свое состояние и правильно добавляться в стек приложения, чтобы это не повлияло на UX. Но когда я использую этот метод в официальной документации, он сохраняет только состояние HomeGraph, а не остальные. Я хочу, чтобы он сохранял и восстанавливал все элементы TopLevelDestination
Вот минимальный проект воспроизводителя: https://github.com/sevbanBayir/NestedGraphExp
Метод, рекомендованный в документации, и который я использовал для сохранения состояния навигации между экранами:
fun NavController.navigateToTopLevelDestination(topLevelDestination: TopLevelDestination) {
navigate(topLevelDestination.route) {
popUpTo(graph.findStartDestination().id) {
saveState = true
}
launchSingleTop = true
restoreState = true
}
}
Мои настройки навигации:
NavHost(
navController = navController,
startDestination = Destination.HomeDestination.HomeGraph,
modifier = Modifier.padding(padding)
) {
homeGraph(navController)
profileGraph(navController)
menuGraph(navController)
}
И каждый график выглядит так:
fun NavGraphBuilder.homeGraph(navController: NavController) {
navigation(startDestination = HomeDestination.Home1) {
composable {
Column(
Modifier.fillMaxSize(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
Text(HomeDestination.Home1.toString())
Button(onClick = { navController.navigate(HomeDestination.Home2) }) {
Text("Next")
}
}
}
composable {
Column(
Modifier.fillMaxSize(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
Text(HomeDestination.Home2.toString())
Button(onClick = { navController.navigate(HomeDestination.Home3) }) {
Text("Next")
}
}
}
composable {
Column(
Modifier.fillMaxSize(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
Text(HomeDestination.Home3.toString())
}
}
}
}
Наконец, это мои определения TopLevelDestination:
enum class TopLevelDestination(val route: Destination, val icon: ImageVector) {
HOME(Destination.HomeDestination.HomeGraph, icon = Icons.Default.Home),
PROFILE(Destination.ProfileDestination.ProfileGraph, icon = Icons.Default.Person),
MENU(Destination.MenuDestination.MenuGraph, icon = Icons.Default.Menu)
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... vel-states
При переходе к пункту назначения верхнего уровня не сохраняются все состояния верхнего уровня. ⇐ Android
Форум для тех, кто программирует под Android
1730796344
Anonymous
[b]Проблема[/b]
В моем приложении есть три вложенных навигационных графика: HomeGraph, ProfileGraph и MenuGraph. Я хочу добиться того, чтобы при переходе между этими графиками через BottomNavigationBar каждый из них должен сохранять свое состояние и правильно добавляться в стек приложения, чтобы это не повлияло на UX. Но когда я использую этот метод в официальной документации, он сохраняет только состояние HomeGraph, а не остальные. Я хочу, чтобы он сохранял и восстанавливал все элементы TopLevelDestination
Вот минимальный проект воспроизводителя: https://github.com/sevbanBayir/NestedGraphExp
[b]Метод, рекомендованный в документации, и который я использовал для сохранения состояния навигации между экранами:[/b]
fun NavController.navigateToTopLevelDestination(topLevelDestination: TopLevelDestination) {
navigate(topLevelDestination.route) {
popUpTo(graph.findStartDestination().id) {
saveState = true
}
launchSingleTop = true
restoreState = true
}
}
[b]Мои настройки навигации:[/b]
NavHost(
navController = navController,
startDestination = Destination.HomeDestination.HomeGraph,
modifier = Modifier.padding(padding)
) {
homeGraph(navController)
profileGraph(navController)
menuGraph(navController)
}
[b]И каждый график выглядит так:[/b]
fun NavGraphBuilder.homeGraph(navController: NavController) {
navigation(startDestination = HomeDestination.Home1) {
composable {
Column(
Modifier.fillMaxSize(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
Text(HomeDestination.Home1.toString())
Button(onClick = { navController.navigate(HomeDestination.Home2) }) {
Text("Next")
}
}
}
composable {
Column(
Modifier.fillMaxSize(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
Text(HomeDestination.Home2.toString())
Button(onClick = { navController.navigate(HomeDestination.Home3) }) {
Text("Next")
}
}
}
composable {
Column(
Modifier.fillMaxSize(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
Text(HomeDestination.Home3.toString())
}
}
}
}
[b]Наконец, это мои определения TopLevelDestination:[/b]
enum class TopLevelDestination(val route: Destination, val icon: ImageVector) {
HOME(Destination.HomeDestination.HomeGraph, icon = Icons.Default.Home),
PROFILE(Destination.ProfileDestination.ProfileGraph, icon = Icons.Default.Person),
MENU(Destination.MenuDestination.MenuGraph, icon = Icons.Default.Menu)
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79158279/navigating-to-a-top-level-destination-doesnt-save-all-toplevel-states[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия