我尝试通过单击BottomNavBar上的按钮集来启动Activity。使用NavGraphBuilder.navigation()
设置了编写导航,每个编写屏幕都有composable()
调用,如下所示:
navigation(
startDestination = "home",
route = "main"
) {
composable("home") {
HomeScreen(...)
}
// Several more Screens
}
我已经了解了NavGraphBuilder.activity()
,所以我在想:
activity("tickets") {
this.activityClass = ExternalActivity::class
}
如果ExternalActivity不需要任何数据传递给它,它就可以工作。
想到的唯一可行的替代方案是使用composable()
并从那里启动活动:
composable("tickets") { backStackEntry ->
val config = // get config from arguments
context.startActivity(
Intent(context, ExternalActivity::class.java).apply {
putExtra("config", config)
}
)
}
或者类似的东西。但是它有点乱,而且有一些副作用,所以我想避免它。
是否有办法使用activity()
调用并将数据传递给正在启动的"活动"?
我受限于我工作的代码库的架构,所以是的,它需要是一个Activity(它实际上来自外部库)。
谢谢。
1条答案
按热度按时间a8jjtwal1#
唯一与您尝试做的事情有点相似的是
data
。但是
data
就是Uri
,所以它可能不适合您的需要,特别是如果您要处理外部库的话,那么context.startActivity()
将是下一个选择,就像您的第二种方法一样。需要注意的一点是,当您使用
context.startActivity()
(而不是NavGraphBuilder.activity()
)时,您需要在Activity关闭时正确设置“当前”目的地(例如,调用navController.navigateUp()
或navController.popBackStack()
)。否则,它会跳回到您刚刚关闭的Activity,因为就NavController而言,您启动(现在已关闭)的Activity就是当前目的地。