以下是 BottomNav 实现的概述。该应用程序正确显示底部导航栏,但当选择某个项目时,它会多次调用NavHost。我看到Jetpack撰写样本 https://github.com/android/compose-samples/tree/main/Jetsnack 一个类似的问题。是否有任何解决方法可以避免多次Navhost调用?
@Composable
fun MainScreen() {
val navController = rememberNavController()
Scaffold(
bottomBar = { BottomMenu(navController = navController) }
) {
BottomNavGraphBar(navController = navController)
}
}
// handling the click event
BottomNavigationItem(
onClick = {
navController.navigate(screen.route) {
popUpTo(navController.graph.findStartDestination().id)
launchSingleTop = true
}
}
)
//NavHost implementation
@Composable
fun BottomNavGraphBar(navController: NavHostController) {
NavHost(
navController = navController,
startDestination = Screen.Home.route
) {
composable(route = Screen.Home.route) {
Log.d("BottomNavGraph","BottomNavGraph->HomeScreen")
HomeScreen()
}
composable(route = Screen.Settings.route) {
Log.d("BottomNavGraph","BottomNavGraph->AppSettingsScreen")
AppSettingsScreen()
}
composable(route = Screen.Profile.route) {
Log.d("BottomNavGraph","BottomNavGraph->ProfileScreen")
ProfileScreen()
}
}
}
<!---LogCat-->
// When app is launched
BottomNavGraph->HomeScreen
BottomNavGraph->HomeScreen
// clicked on the profile.
BottomNavGraph->HomeScreen
BottomNavGraph->ProfileScreen
BottomNavGraph->HomeScreen
BottomNavGraph->ProfileScreen
Compose可以(并且将根据多种情况)调用可组合函数来“重新组合”它们。尽管它是智能的,并且可以缓存可组合函数的输出以用于其先前的输入,因此它不必重新计算其结果(例如,它们发出的UI)。
在您的示例中,可组合(...){...}
可能会被重新组合,但如果您在其中使用可组合(如一些Text
s),它将使用其上次渲染中的缓存。
你不必担心你的函数被调用,但你必须处理好你的计算。这就是为什么您希望使用“记住”来计算某些内容并将其存储在缓存中,以便不再重新计算。
我想根据条件更改我的开始导航片段。我的起始片段可以是片段1或片段2。有没有办法实现它?
我是jetpack compose的新手,从< code>JetpackCompose基础代码中学习它,所以我在创建一个高性能的懒惰列表中找到了它 注意:LazyColumn不会像那样回收其子项。当您滚动浏览它时,它会发出新的,并且仍然具有高性能,因为与实例化Android视图相比,发出相对便宜。 因此,发出新的可组合项是多么的便宜和高效,那么为什么不使用列并一次性组合整个列表,而不是在滚动时不断
我创建了一个项目,并添加了插件和dependency,我还对其进行了测试,结果很好。但当我重构项目以使用并启用jetifier工具项目不会构建,我会遇到多个错误,如: 转换文件“crashlytics-2.9.2.aar”以匹配属性{artifactType=jetitied-aar}失败 似乎< code>jetifier工具和< code>Crashlytics依赖项有问题。有没有办法关闭单个
我将我的按钮定义为这样的可组合按钮: 我已经检查了调试器,返回合适的颜色(白色)(0xFFFFFFFF) 但是我不能让按钮上的文字变成白色。 这是预览 设置会导致文本颜色的变化,但我想从按钮颜色设置它,而不是为文本设置一种唯一的颜色 将按钮的文本样式颜色设置为未指定后,它仍然不起作用: 形状是Android Studio项目生成器的默认形状 颜色 主题 排印
我在jetpack撰写中使用了BottomSheet视图,但我想使用BotomSheet锁定屏幕,直到我们单击BotomShets的按钮并在BotomSheet中禁用外部触摸。我怎么做? 我的底单: 可组合函数是一个谷歌地图屏幕
我正在将一个片段从旧的Jetpack迁移到Jetpack Compose。此片段是现有导航图的一部分。 迁移片段(使用ComposeView)进行合成后,片段方向不再可用。 这种情况下你会怎么做?片段是导航图一部分,几个未组合的片段导航到它。 以下是片段的 onCreateView: