Android Studio中navigation.xml无预览 打开startDestination时出现闪退
问题排查修复方案
以下是经过验证的修复步骤,按优先级逐一排查即可解决闪退和预览失效问题:
- 自定义参数配置错误修复
你配置的navigation_paymentResultFragment中,paymentModel自定义类型参数既没有设置默认值,也没有声明可空属性,导航组件无法为自定义类型生成默认实例,是导致预览失败和传参异常崩溃的核心原因:
<!-- 原错误写法 --> <argument android:name="paymentModel" app:argType="modularization.libraries.dataSource.models.PaymentModel" />
根据业务逻辑选择以下任意一种修复方案即可:
<!-- 方案1:允许参数为空 --> <argument android:name="paymentModel" app:argType="modularization.libraries.dataSource.models.PaymentModel" app:nullable="true" /> <!-- 方案2:设置默认值为null --> <argument android:name="paymentModel" app:argType="modularization.libraries.dataSource.models.PaymentModel" android:defaultValue="@null" app:nullable="true" />
- 补全预览配置
navigation_transferCreditFragment没有配置tools:layout属性,会导致导航图整体预览渲染失败,补全对应布局声明即可:
<fragment android:id="@+id/navigation_transferCreditFragment" android:name="modularization.features.wallet.view.transfer.TransferCreditFragment" android:label="transferCreditFragment" tools:layout="@layout/你的transferCredit页布局文件名" >
- 启动页布局排查
打开起始页直接闪退的情况下,单独检查fragment_user_selector布局文件第63行的代码,报错提示的行号对应就是该布局里的错误位置,排查是否有自定义控件引用错误、属性配置非法、资源不存在的问题。 - 兼容性优化
如果使用的Navigation组件版本低于2.4.0,根标签下的全局action可能存在兼容性问题,可升级Navigation组件到2.4.0及以上稳定版,或者把两个全局action移到需要调用的fragment标签内部。 - 参数类型校验
确认PaymentModel类已经正确实现了Parcelable接口(官方推荐)或者Serializable接口,否则导航组件无法正确解析传递该参数,也会触发运行时异常。
内容的提问来源于stack exchange,提问作者Hossein Kurd
相关产品推荐
相关产品推荐

