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
相关产品推荐
相关产品推荐

