声明一堆可绘制对象 (Kotlin) 的最佳方法是什么?

What is the best way to declare a bunch of drawables (Kotlin)?

我有很多矢量图标作为 XML 可绘制资源(准确地说是 96 个)。我将它们分为 8 个类别。目前我声明它们如下:

private val categoryA = arrayListOf(R.drawable.a1, ... R.drawable.an)
private val categoryB = arrayListOf(R.drawable.b1, ... R.drawable.bn)
***
private val categoryH = arrayListOf(R.drawable.h1, ... R.drawable.hn)

一切都运行良好且快速,但我不确定这是否是真正应用程序的好方法。我还在应用程序中将 Room DB 用于其他目的,所以我应该添加新的 table 并在首次启动时预填充数据库吗? 这也很容易,至少现在,稍后 add/remove 图标......但另一方面,代码看起来不太好(对我来说)有这么多 R.drawable.id 行。

编写一个可以通过反射获取可绘制 Int 的函数:

fun getDrawableIdByName(name: String) = try {
    R.drawable::class.java.getField(name).getInt(null)
} catch (e: NoSuchFieldException) {
    error("No drawable with name $name")
}

然后你可以用它构建你的列表:

val categoryLists = ('a'..'h')
    .map { category ->
        List(12) { index ->
            getDrawableIdByName("$category${index + 1}")
        }
    }

我想你可以在第一次启动后将它写入你的数据库,但我认为这对于只有 96 个项目来说有点过分了。