You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Navigation组件访问带可空参数的Fragment时崩溃求助

问题描述

我的OrdersFragment配置了名为option的可空导航参数,配置代码如下:

<argument
    android:name="option"
    app:argType="string"
    app:nullable="true" />

为处理该参数,我在onViewCreated方法上方声明了变量:

private val args : OrdersFragmentArgs? by navArgs()

并在onViewCreated中编写了逻辑:

args?.let {
    if(it.option.equals("Completada")){
        getCompletedOrders()
    }else if (it.option.equals("Cancelada")){
        getCanceledOrders()
    }
}

但进入OrdersFragment时应用崩溃,错误日志核心提示:

Caused by: java.lang.IllegalArgumentException: Required argument "option" is missing and does not have an android:defaultValue

我需要实现从EditOrderFragment向OrdersFragment传递option参数,但目前无法正常访问该Fragment。使用的依赖版本:

id 'androidx.navigation.safeargs' version '2.5.3' apply false

//Navigation components
implementation "androidx.navigation:navigation-fragment-ktx:2.5.0"
implementation "androidx.navigation:navigation-ui-ktx:2.5.0"
错误原因

在Navigation Safe Args 2.5.x版本中,仅设置app:nullable="true"不会将参数标记为可选。必须同时指定android:defaultValue,否则Safe Args会强制将参数视为必填项,当未传递参数时就会抛出上述异常。

解决方案

方案1:为参数添加默认值(推荐)

修改导航参数配置,添加android:defaultValue="@null",让参数被识别为可选:

<argument
    android:name="option"
    app:argType="string"
    app:nullable="true"
    android:defaultValue="@null" />

修改后重新编译项目,原有的args?.let逻辑即可正常工作。

方案2:手动从Bundle获取参数

如果不想添加默认值,可以直接从Fragment的arguments中手动获取参数,绕过Safe Args的必填校验:

// 替换原有的args声明
private val option: String? by lazy {
    arguments?.getString("option")
}

// 在onViewCreated中使用
option?.let {
    if(it == "Completada"){
        getCompletedOrders()
    }else if (it == "Cancelada"){
        getCanceledOrders()
    }
}

补充:确保跳转时参数传递正确

从EditOrderFragment跳转至OrdersFragment时,需确保正确传递参数(如果需要传递):

// 方式1:使用Safe Args生成的跳转方法
val action = EditOrderFragmentDirections.actionEditOrderFragmentToOrdersFragment("Completada")
findNavController().navigate(action)

// 方式2:手动构建Bundle传递
val bundle = bundleOf("option" to "Completada")
findNavController().navigate(R.id.action_editOrderFragment_to_ordersFragment, bundle)

内容的提问来源于stack exchange,提问作者FreddicMatters

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 17:25:26