Android Home Fragment首次启动无Bundle报错及传值失效问题
问题分析与解决方案
核心问题
- 发送参数的方式错误:你手动创建了
Notlar实例并设置arguments,但Navigation组件调用navigate()时会自动创建目标Fragment的实例,你手动创建的那个实例根本不会被使用,导致设置的参数无效。 - 接收参数时的强制非空风险:
requireArguments()会在Fragment无参数时抛出IllegalStateException,即便用try-catch捕获,也没必要——因为arguments本身是可空属性,直接判断即可。
修正步骤
1. 修复发送参数代码
删除手动创建Fragment和设置arguments的冗余代码,直接通过navigate()传递Bundle:
// 修正后的发送代码 val bundle = Bundle() bundle.putInt("categoryId", -99) findNavController().navigate(R.id.action_kategoriler_to_notlar, bundle)
2. 修复接收参数代码
放弃requireArguments(),改用可空的arguments结合默认值处理首次启动无参数的场景,无需try-catch:
// 修正后的接收代码 categoryIdBundle = arguments?.getInt("categoryId", -1) ?: -1
arguments?.getInt(...):安全调用,当无参数时返回null?: -1:当前面结果为null时,使用默认值-1,完美覆盖首次启动的情况
内容的提问来源于stack exchange,提问作者Ahmet Kaan
相关产品推荐
相关产品推荐

