我正在将我的多活动应用程序迁移到单活动应用程序进行合成。
我创建了一个可组合的Home,其中包含一个Top应用程序栏,标题如下所示:
@Composable
fun Home() {
val navController = rememberNavController()
var actionBarTitle by rememberSaveable { mutableStateOf("Home") }
var actionBarSubtitle by rememberSaveable { mutableStateOf("") }
Scaffold(topBar = {
Header(title = actionBarTitle, subTitle = actionBarSubtitle,
onBackPress = { navController.popBackStack() },
showInfo = true, onActionClick = {
navController.navigate(Screen.Info.route)
}, modifier = Modifier.fillMaxWidth())
}) {
AppNavigation(navController = navController, onNavigate = { title, subtitle ->
actionBarTitle = title
actionBarSubtitle = subtitle
})
}
每当我使用navController时,onNavigate就会被触发。导航到任何屏幕,如下所示:
onNavigate("Top up", "Please topm up with minimum of X amount")
navController.navigateTo(Screen.TopUp.route)
我的问题是,当我使用backpress时,我不知道我将被导航到哪个屏幕组合,所以我如何调用onNavigate来更改标题。
3条答案
按热度按时间8e2ybdfx1#
您可以使用
currentBackstackEntryFlow
观察导航变化。当然,您需要编写这个
getTitleByRoute()
,以便根据导航路线获得正确的标题。kcrjzv8t2#
1.使用组合时使用LiveData更改屏幕标题
实现“androidx.compose.runtime:运行时间-实时数据:1.2.0-beta 02”
2.创建视图模型类
3.在活动课上
//观察屏幕标题
4.从屏幕更改标题值
kmpatx3s3#
可以从
navHostcontrollor
中获取当前目的地的标签,将其作为标题即可缺省
composable
函数的实现方式如下过载:
您可以按以下方式使用它: