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

Android ResourcesNotFoundException问题:自定义Parcelable对象传值后颜色设置异常

解决Parcelable对象传递后设置背景色出现的ResourcesNotFoundException问题

结合你给出的代码场景,这个异常大概率是颜色值类型不匹配或者Parcelable序列化错误导致的,我给你拆解下原因和对应的解决办法:

可能的原因

  • 颜色选择器返回的不是直接的ARGB颜色值,而是Android资源ID(比如R.color.red对应的整数),直接调用setBackgroundColor()时,系统会把这个整数当成资源ID去查找,自然找不到对应的资源就抛出异常。
  • 你的sub对象在Parcelable序列化/反序列化过程中,color字段没有被正确读写,导致传递后拿到的是无效值(比如错误的资源ID或者未初始化的默认值)。

具体解决方案

1. 先校验并转换颜色值类型

在onColorSelected方法里,先判断返回的color是资源ID还是直接的颜色值,再做对应处理:

override fun onColorSelected(dialogId: Int, color: Int) {
    // Android资源ID的起始范围是0x7f000000,可以用这个判断是否是资源ID
    val actualColor = if (color >= 0x7f000000) {
        // 如果是资源ID,先转换成实际的ARGB颜色值
        resources.getColor(color, this.theme)
    } else {
        // 已经是直接的颜色值,直接使用
        color
    }
    
    sub.color = actualColor
    createsub_rel.backgroundColor = actualColor
}

如果用的是第三方颜色选择库,建议去查下它的文档,确认是否可以配置返回直接的颜色值,这样就不用额外判断了。

2. 检查Parcelable对象的序列化逻辑

确保你的sub类的Parcelable实现中,color字段被正确读写,比如:

class Sub : Parcelable {
    var color: Int = 0 // 默认可以设为一个合法的颜色值,比如Color.WHITE

    constructor(parcel: Parcel) : this() {
        // 读取color字段
        color = parcel.readInt()
    }

    override fun writeToParcel(parcel: Parcel, flags: Int) {
        // 写入color字段
        parcel.writeInt(color)
    }

    override fun describeContents(): Int = 0

    companion object CREATOR : Parcelable.Creator<Sub> {
        override fun createFromParcel(parcel: Parcel): Sub = Sub(parcel)
        override fun newArray(size: Int): Array<Sub?> = arrayOfNulls(size)
    }
}

如果这里遗漏了color的读写,传递后的sub.color会是默认值0,虽然0本身是黑色,但如果是其他无效值就会触发异常。

3. 替代方案:使用backgroundTintList设置背景色

如果你不想纠结颜色值类型,可以用backgroundTintList来设置,它对颜色值的兼容性更好,不会把整数当成资源ID解析:

createsub_rel.backgroundTintList = ColorStateList.valueOf(actualColor)

调试小技巧

可以在onColorSelected里加一行日志,打印color的值:

Log.d("ColorDebug", "Selected color value: $color")

如果打印的是类似2131099648这种大整数,那就是资源ID;如果是-16777216(对应黑色)这种负数,就是直接的ARGB颜色值,这样能快速定位问题所在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:10:30