Anonymous
Как я могу обновить поднятое состояние моего топапбара на пункт назначения?
Сообщение
Anonymous » 12 мар 2025, 14:27
У меня есть NavigationBar с Navhost , содержащим два направления:
Код: Выделить всё
@Serializable
object Training
@Serializable
object Statistics
data class TopLevelRoute(val name: String, val route: T, val icon: ImageVector)
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun HomeScreen() {
val topLevelRoutes = listOf(
TopLevelRoute("Training", Training, Icons.Default.Lightbulb),
TopLevelRoute("Statistics", Statistics, Icons.Default.AutoGraph)
)
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
val navController = rememberNavController()
Scaffold(
modifier = Modifier
.fillMaxSize()
.nestedScroll(scrollBehavior.nestedScrollConnection),
topBar = {
CenterAlignedTopAppBar(
scrollBehavior = scrollBehavior,
title = {
Text("Title")
}
)
},
bottomBar = {
NavigationBar {
val navBackStackEntry by navController.currentBackStackEntryAsState()
val currentDestination = navBackStackEntry?.destination
topLevelRoutes.forEach { topLevelRoute ->
NavigationBarItem(
icon = { Icon(topLevelRoute.icon, contentDescription = topLevelRoute.name) },
label = { Text(topLevelRoute.name) },
selected = currentDestination?.hierarchy?.any { it.hasRoute(topLevelRoute.route::class) } == true,
onClick = {
navController.navigate(topLevelRoute.route) {
popUpTo(navController.graph.findStartDestination().id) {
saveState = true
}
launchSingleTop = true
restoreState = true
}
}
)
}
}
}
) { innerPadding ->
NavHost(navController, startDestination = Training, Modifier.padding(innerPadding)) {
composable {
Text("Training")
}
composable {
StatisticsScreen()
}
}
}
}
@Composable
fun StatisticsScreen() {
LazyColumn {
items(50) {
Text(modifier = Modifier.fillMaxWidth(), text = "Item $it")
}
}
}
Я использую pinnedscrollbehavior , чтобы CenteralignedTopAppbar поднимается после того, как содержимое под ним прокручивается. Проблема, которая у меня есть, заключается в том, что поднятое состояние не обновляется на место по месту место - после того, как я переключаюсь в не разбесное местоположение, CenteralignedTopAppbar остается поднятым.
Подробнее здесь:
https://stackoverflow.com/questions/795 ... estination
1741778864
Anonymous
У меня есть NavigationBar с Navhost , содержащим два направления: [code]@Serializable object Training @Serializable object Statistics data class TopLevelRoute(val name: String, val route: T, val icon: ImageVector) @OptIn(ExperimentalMaterial3Api::class) @Composable fun HomeScreen() { val topLevelRoutes = listOf( TopLevelRoute("Training", Training, Icons.Default.Lightbulb), TopLevelRoute("Statistics", Statistics, Icons.Default.AutoGraph) ) val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState()) val navController = rememberNavController() Scaffold( modifier = Modifier .fillMaxSize() .nestedScroll(scrollBehavior.nestedScrollConnection), topBar = { CenterAlignedTopAppBar( scrollBehavior = scrollBehavior, title = { Text("Title") } ) }, bottomBar = { NavigationBar { val navBackStackEntry by navController.currentBackStackEntryAsState() val currentDestination = navBackStackEntry?.destination topLevelRoutes.forEach { topLevelRoute -> NavigationBarItem( icon = { Icon(topLevelRoute.icon, contentDescription = topLevelRoute.name) }, label = { Text(topLevelRoute.name) }, selected = currentDestination?.hierarchy?.any { it.hasRoute(topLevelRoute.route::class) } == true, onClick = { navController.navigate(topLevelRoute.route) { popUpTo(navController.graph.findStartDestination().id) { saveState = true } launchSingleTop = true restoreState = true } } ) } } } ) { innerPadding -> NavHost(navController, startDestination = Training, Modifier.padding(innerPadding)) { composable { Text("Training") } composable { StatisticsScreen() } } } } @Composable fun StatisticsScreen() { LazyColumn { items(50) { Text(modifier = Modifier.fillMaxWidth(), text = "Item $it") } } } [/code] Я использую pinnedscrollbehavior , чтобы CenteralignedTopAppbar поднимается после того, как содержимое под ним прокручивается. Проблема, которая у меня есть, заключается в том, что поднятое состояние не обновляется на место по месту место - после того, как я переключаюсь в не разбесное местоположение, CenteralignedTopAppbar остается поднятым. Подробнее здесь: [url]https://stackoverflow.com/questions/79503436/how-can-i-refresh-the-lifted-state-of-my-topappbar-per-destination[/url]