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

Android Kotlin如何在数据类中存储Drawable图标并用于ImageView显示?

解决Android中Category数据类存储Drawable图标的问题

我来帮你搞定这个问题!其实你完全不需要用Bitmap或者Image类型来存储图标,Android里最适合的方式是直接用资源ID(Int类型),因为ImageView.setImageResource()方法本身就接受Int类型的资源ID参数,这样既简洁又高效。

步骤1:修正Category数据类

把icon的类型从Image改成Int,因为R.drawable.ic_delete本质就是一个Int类型的资源标识:

data class Category(
    val id: EnumCategories,
    val name: String,
    val itemType: EnumTypes?,
    val icon: Int // 这里改成Int类型,对应drawable资源ID
)

步骤2:填充categories列表

直接传入R.drawable.xxx作为icon参数就可以了,比如你提到的ic_delete:

val categories = listOf(
    Category(EnumCategories.CATEGORY01, "CATEGORY01", null, R.drawable.ic_delete),
    Category(EnumCategories.CATEGORY02, "CATEGORY02", EnumTypes.TYPE1, R.drawable.ic_other_icon),
    Category(EnumCategories.CATEGORY03, "CATEGORY03", EnumTypes.TYPE2, R.drawable.ic_another_icon)
)

步骤3:在ImageView中显示图标

这时候你原来想写的代码就完全能用了:

imageView.setImageResource(categories[0].icon)

为什么不推荐用Bitmap/Image?

  • 内存占用问题:Bitmap会直接把图片加载到内存里,如果你的列表有很多项,容易造成内存浪费甚至OOM(内存溢出)。而用资源ID的话,图片只会在需要显示的时候才会被加载,而且系统会帮你管理缓存。
  • 灵活性差:如果后续需要更换图标,直接修改R.drawable.xxx的引用就行,不需要修改数据类的结构或者处理Bitmap的转换逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:10:41