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

Jetpack Compose中MainActivity传AndroidItem至Nav函数报错求助

解决Nav函数传参报错及代码问题

核心问题分析

当前报错No value passed for parameter 'data'的直接原因是调用Nav(data = )时未传入实际的AndroidItem实例,且错误使用了命名参数语法却未赋值。同时代码还存在几处额外问题需要修正:

  • AndroidItem数据类被错误标记为@Composable,数据类无需该注解
  • MyCard函数调用时缺失scaffoldState参数
  • Search_Screen_Details中Android类定义不明确,需补充继承关系

具体修复步骤

1. 修正AndroidItem数据类

移除@Composable注解,数据类不需要该修饰符:

data class AndroidItem(
    val ID: Int?,
    val ItemType: String?,
    val Price: Int?,
)

2. 在MainActivity中正确传递参数

Nav函数的第一个参数就是data: AndroidItem,直接传入合法实例即可,无需使用命名参数:

class MainActivity : ComponentActivity() {

    @OptIn(ExperimentalMaterialApi::class)
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContent {
            Diwaanka2022Theme {
                Surface(
                    modifier = Modifier.fillMaxSize(),
                    color = MaterialTheme.colors.background
                ) {
                    // 创建非空AndroidItem实例,可根据需求替换为真实数据
                    val initialItem = AndroidItem(ID = 1, ItemType = "测试类型", Price = 100)
                    Nav(initialItem) // 直接传参,无需data=
                }
            }
        }
    }
}

3. 修复MyCard函数的调用缺失参数问题

MyCard需要三个参数,补充缺失的scaffoldState:

// 在Search_Screen_Details的LazyColumn中
items(data.value) { item ->
    MyCard(
        data = item,
        navController = navController,
        scaffoldState = scaffoldState // 补充该参数
    )
}

4. 明确Android类的定义

如果Android是用来存储列表的自定义类,补充继承关系:

// 在合适位置定义(如文件顶部)
class Android : ArrayList<AndroidItem>()

额外说明

若你需要从网络请求后再传递AndroidItem给Nav,则不能在MainActivity的onCreate中直接硬编码实例,需通过remember和mutableStateOf管理状态,待请求完成后更新状态触发UI重组,再传递参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 21:35:15