如何在Jetpack Navigation目标Fragment中提取应用内DeepLink的URI
不用修改导航图参数,也无需手动传递URI,直接通过Navigation组件原生API就能拿到触发导航的目标URI,具体实现如下:
- 在Fragment B的
onViewCreated(或其他合适的生命周期方法)中,获取当前导航栈条目:val navController = findNavController() val currentBackStackEntry = navController.currentBackStackEntry - 从栈条目中提取触发导航的URI:
val triggerUri = currentBackStackEntry?.deeplink?.uri // 此时triggerUri就是Fragment A中传入的"myApp://destination"
原理说明
当你通过navController.navigate(URI)发起内部DeepLink导航时,Navigation框架会自动将该URI绑定到目标Fragment对应的NavBackStackEntry中。deeplink.uri是官方暴露的专用API,专门用来获取触发当前栈条目的DeepLink地址,不管是外部跳转还是应用内导航都适用。
你之前在arguments.mData中看到的URI是框架内部存储的临时数据,没有公开的键值可供直接提取,因此使用deeplink属性才是符合组件设计逻辑的最优方案,比手动传参更简洁且无需额外配置导航图。
内容的提问来源于stack exchange,提问作者Gastón Saillán
相关产品推荐
相关产品推荐

