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

Jetpack Compose示例报错:No get method providing array access

解决Jetpack Compose Scaffold示例中的colors下标访问错误

你猜的没错,问题确实出在colors变量上!官方示例这里应该是个小疏漏,因为MaterialTheme.colors并不是一个可以用下标访问的数组或列表,它是一个**Colors类型的单例对象**,里面包含了像primary、secondary、background这类单个的颜色属性,所以直接用[]访问肯定会报错。

从你贴出的MaterialTheme源码也能看出来,colors返回的是LocalColors.current,类型是Colors——这个类里并没有定义下标运算符,所以编译器找不到对应的方法,就会报你看到的错误。

下面给你两种可行的修正方案,都能实现原示例中“每行背景色循环切换”的效果:

方案一:自定义颜色列表,用循环切换背景

先创建一个包含主题颜色的列表,之后就可以用下标循环访问了:

// 在LazyColumn的items块内定义颜色列表
val colorList = listOf(
    colors.primary,
    colors.secondary,
    colors.background,
    colors.surface,
    colors.error
)

Box(
    Modifier
        .fillMaxWidth()
        .height(50.dp)
        .background(colorList[it % colorList.size])
)

方案二:根据索引匹配主题颜色属性

如果不想额外定义列表,也可以通过when语句根据索引直接选择主题里的颜色:

Box(
    Modifier
        .fillMaxWidth()
        .height(50.dp)
        .background(
            when(it % 5) {
                0 -> colors.primary
                1 -> colors.secondary
                2 -> colors.background
                3 -> colors.surface
                else -> colors.error
            }
        )
)

作为Jetpack Compose初学者,遇到这种官方示例的小问题时,查看对应类的源码(就像你已经做的那样)是非常好的习惯,能帮你快速搞清楚API的实际用法~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 18:40:39