升级Navigation 2.4.0-alpha08后deeplink不识别参数默认值问题
问题根因
这是Navigation 2.4.0-alpha08版本的官方bug,该版本对deeplink参数校验逻辑做了迭代:
- 新增了导航图初始化阶段的deeplink预校验逻辑,要求每个deeplink必须覆盖目标目的地的所有必填参数,避免运行时跳转才暴露参数缺失问题
- 但该版本的校验逻辑存在疏漏,错误将*可空类型且默认值设为
@null*的参数识别为必填参数,忽略了配置的默认值,因此触发报错 - 2.4.0-alpha06版本没有这套预校验逻辑,因此不会出现该异常
修复方案
在官方发布修复版本前,可任选以下一种方案临时规避:
- 方案1:将Navigation组件版本回退到2.4.0-alpha06,规避新增的校验逻辑
- 方案2:在deeplink规则中补充
ids参数的占位,让校验逻辑识别到该参数已被覆盖,无需修改原有跳转逻辑:
由于你已经给<deepLink app:uri="mysite.com/{name}?ids={ids}" />ids配置了默认值@null,实际跳转时如果url没有携带ids参数,组件会自动填充默认值,不会影响原有业务逻辑。 - 方案3:在
ids参数的配置中显式声明app:nullable="true",强制让校验逻辑识别该参数为可选参数:<argument android:name="ids" app:argType="java.util.List<java.lang.Integer>" app:nullable="true" android:defaultValue="@null" />
待官方后续修复版本发布后,升级到对应版本即可移除上述临时适配代码。
内容的提问来源于stack exchange,提问作者deanWombourne
相关产品推荐
相关产品推荐

