我正在使用branch.io来处理深层链接。深度链接可以以JsonObject的形式包含自定义元数据。数据可以通过在MainActivity#onStart()
中设置侦听器来获得,当单击链接时会触发监听器。
override fun onStart() {
super.onStart()
Branch
.sessionBuilder(this)
.withCallback { referringParams, error ->
if (error == null) {
val eventId = referringParams?.getString("id")
//Here I would like to navigate user to event screen
} else {
Timber.e(error.message)
}
}
.withData(this.intent?.data).init()
}
当我从eventId
检索referringParams
时,我必须将用户导航到特定的事件。当我使用带有片段的导航组件时,我可以这样做:
findNavController(R.id.navHost).navigate("path to event screen")
但是使用Composable是不同的,因为我不能在Composable之外使用navController
,因为它位于MainActivity#onCreate()
中
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
//I cant access navController outside of composable function
val navController = rememberNavController()
NavHost(
navController = navController,
startDestination = "HomeScreen",
) {
}
}
}
我的问题是,在使用jetpack组合导航时,如何从MainActivity#onStart()
导航用户到特定屏幕?
发布于 2022-04-29 07:13:35
rememberNavController
有非常简单的实现:它使用撰写所需的两个导航器创建NavHostController
,并确保在配置更改时恢复。
下面是在可组合范围之外的活动中如何做同样的事情:
private lateinit var navController: NavHostController
private val navControllerBundleKey = "navControllerBundleKey"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
navController = NavHostController(this).apply {
navigatorProvider.addNavigator(ComposeNavigator())
navigatorProvider.addNavigator(DialogNavigator())
}
savedInstanceState
?.getBundle(navControllerBundleKey)
?.apply(navController::restoreState)
setContent {
// pass navController to NavHost
}
}
override fun onSaveInstanceState(outState: Bundle) {
outState.putBundle(navControllerBundleKey, navController.saveState())
super.onSaveInstanceState(outState)
}
https://stackoverflow.com/questions/72053534
复制相似问题