Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 申报一堆可提取物品(Kotlin)的最佳方式是什么?_Android_Kotlin_Drawable_Xml Drawable - Fatal编程技术网

Android 申报一堆可提取物品(Kotlin)的最佳方式是什么?

Android 申报一堆可提取物品(Kotlin)的最佳方式是什么?,android,kotlin,drawable,xml-drawable,Android,Kotlin,Drawable,Xml Drawable,我有很多矢量图标作为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.dra

我有很多矢量图标作为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)
一切都很好,速度也很快,但我不确定这是否是一个真正的应用程序的好方法。在应用程序中,我还将房间DB用于其他目的,所以我是否应该在第一次启动时添加新表并预填充DB?
以后添加/删除图标也很容易,至少现在是这样。。。但另一方面,(对我来说)代码看起来不太好,有这么多
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个项目来说,这样做太过分了。

Mmm我认为在APK中存储几个可绘图项不是一个好做法。您可以改用服务器。事实上,在运行时为“生产”应用程序存储96个静态变量都不是一个好的做法。当然,这是我的观点,它不一定是对的。Xml可绘制文件将很小。强制应用程序需要Internet访问才能运行以暂时节省少量空间是没有意义的。写入数据库将是一个问题,因为构建之间的资源ID不匹配。是的,你必须为应用程序更新注册一个接收器,并在每次有更新时重复它。这是一个想法。。。我今天还找到了这本指南:。那么,在res/values下创建一个数组并为每个类别定义一个数组是更好还是更差的方法呢?这是一个意见问题。我可能会这样做,而不是使用xml数组来减少出错的机会。xml数组不会比您最初拥有的更好。。。很多打印出来的值我已经尝试过这个功能,对我来说效果很好,谢谢。我有一个“可选”问题。有没有办法获得所有以“abc”开头的抽绳?比如getField.contains(“abc_”)