- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在寻找 setupWithNavController(Toolbar, NavController) 的 Compose 变体自动更新 AppBar
中的向上按钮每当导航目的地发生变化时。
到目前为止,我还没有发现任何有用的东西。
它在 Compose 中被认为是一个糟糕的设计吗?还是有一些简单的方法可以实现我没有看到的相同的东西?
最佳答案
我已经破解了一个解决方案,但我并不满意。androidx.navigation:navigation-compose:1.0.0-alpha08
提供了一个扩展函数来观察当前的回栈入口。
@Composable
fun NavController.currentBackStackEntryAsState(): State<NavBackStackEntry?>
我创建了一个类似的扩展来观察之前的返回堆栈条目
/**
* Gets the previous navigation back stack entry as a [MutableState]. When the given navController
* changes the back stack due to a [NavController.navigate] or [NavController.popBackStack] this
* will trigger a recompose and return the second top entry on the back stack.
*
* @return a mutable state of the previous back stack entry
*/
@Composable
fun NavController.previousBackStackEntryAsState(): State<NavBackStackEntry?> {
val previousNavBackStackEntry = remember { mutableStateOf(previousBackStackEntry) }
// setup the onDestinationChangedListener responsible for detecting when the
// previous back stack entry changes
DisposableEffect(this) {
val callback = NavController.OnDestinationChangedListener { controller, _, _ ->
previousNavBackStackEntry.value = controller.previousBackStackEntry
}
addOnDestinationChangedListener(callback)
// remove the navController on dispose (i.e. when the composable is destroyed)
onDispose {
removeOnDestinationChangedListener(callback)
}
}
return previousNavBackStackEntry
}
和一个可组合的后退按钮
@Composable
fun NavigationIcon(navController: NavController): @Composable (() -> Unit)? {
val previousBackStackEntry: NavBackStackEntry? by navController.previousBackStackEntryAsState()
return previousBackStackEntry?.let {
{
IconButton(onClick = {
navController.popBackStack()
}) {
Icon(Icons.Default.ArrowBack, contentDescription = "Up button")
}
}
}
}
我不得不返回
@Composable (() -> Unit)?
(而不是可组合函数没有返回值)因为
TopAppBar
使用可空性检查是否将标题偏移 16dp(无图标)或 72dp(有图标)。
@Composable
fun MainContent() {
val navController: NavHostController = rememberNavController()
Scaffold(
topBar = {
TopAppBar(
title = { Text("Weather") },
navigationIcon = NavigationIcon(navController)
)
},
) {
NavHost(
navController,
startDestination = "list"
) {
composable("list") {
...
}
composable("detail") {
...
}
}
}
}
列表:
NavigationTopAppBar
可能更简洁可组合和吊装
NavController
出
NavigationIcon
但这个想法保持不变。我没有再费心去修修补补。
androidx.navigation:navigation-compose
中提取相当大的内部实现,就没有可靠的方法来为目的地设置标签。图书馆。
关于Android Compose setupWithNavController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66424963/
我正在寻找 setupWithNavController(Toolbar, NavController) 的 Compose 变体自动更新 AppBar 中的向上按钮每当导航目的地发生变化时。 到目前
我正在尝试将工具栏绑定(bind)到导航 Controller ,为此我使用了以下代码: NavigationUI.setupWithNavController(toolbar, NavHostFra
目前我正在开发一个 Android 应用程序,我想在其中同时使用 Android Navigation Component和 BottomNavigationView . 在开发上述应用程序时,我查看
我们如何仅在单击底部菜单项并且仍使用 setupWithNavController 时跟踪底部菜单导航项的单击? 目前使用底部导航 View 2.4.0-alpha05,我们有一个用于跟踪底部导航点击
我有一个带有 5 个项目和 fragment 的 BottomNavigationView Activity 来显示页面,我将 NavController 设置如下: NavigationUI.set
我是一名优秀的程序员,十分优秀!