Android Jetpack导航图:Action ID与Fragment ID导航的区别
在Jetpack Navigation中,你提到的两种导航写法看似功能相似,但核心逻辑和使用场景有明显区别:
第一种:通过Action ID导航
findNavController().navigate(R.id.action_navigation_login_to_navigation_send_code)
第二种:直接通过目标Fragment ID导航
findNavController().navigate(R.id.navigation_send_code)
核心区别:
导航规则的配置位置不同
用Action ID的方式,所有导航规则(比如跳转动画、返回栈清理、参数定义)都在导航图的action节点里可视化配置,代码只需要触发这个预定义好的动作即可;而直接用目标Fragment ID的方式,没有任何预配置规则,所有导航逻辑(动画、栈处理等)都要在代码里通过NavOptions或Bundle手动设置。返回栈处理的灵活性与便捷性不同
Action方式可以在导航图里直接配置popUpTo和popUpToInclusive属性,比如跳转时自动弹出登录页之前的所有页面,这种配置可视化且统一;直接用目标ID的话,要处理返回栈必须手动写代码创建NavOptions,没法在导航图里提前固化规则。参数传递的可维护性不同
Action方式能在导航图里定义页面间传递的参数,甚至设置默认值,页面间的参数依赖关系在导航图里一目了然;直接用目标ID的话,参数全靠代码里组装Bundle,导航图里看不到任何参数关联,后期维护时很难快速理清页面间的数据传递逻辑。页面流程的可追溯性不同
Action方式在导航图里能清晰展示页面之间的跳转关系,整个APP的页面流程看导航图就能梳理清楚;直接用目标ID的话,导航图里没有任何跳转连线,页面跳转关系全分散在各个代码文件中,团队协作或后期维护时,梳理流程的成本极高。
内容的提问来源于stack exchange,提问作者Tausif
相关产品推荐
相关产品推荐

