当前位置: 首页 > 知识库问答 >
问题:

有没有方法迭代R.Drawable?

盛骏祥
2023-03-14

我有很多图像在绘制,我希望放入一个数组。手动将它们放入数组会花费太长的时间和代码。我想知道是否有一种方法来循环r.drawable,如下所示:

ArrayList<Integer> imgArr = new ArrayList<>();
for(int k=0; k<R.drawable.size(); k++) {
    imgArr.add(R.drawable.get(k));
}

共有1个答案

危卜鹰
2023-03-14

首先,您应该稍微了解一下R类:在这里阅读更多内容

简而言之:r类是一个动态生成的类,它包含内部类(如drawable类)。这些内部类包含多个整数常量,它们链接到相应的资源

这意味着,由于这里的drawable被定义为r.drawable类的成员,我们需要使用反射来访问它们。首先,我们需要获得drawable子类的一个实例。不幸的是,这个类的构造函数是私有的,但是我们可以使用更多的反射来解决这个问题:

Class<R.drawable> drawableClass = R.drawable.class;
R.drawable instance = (R.drawable) drawableClass.getConstructors()[0].newInstance();
List<Integer> drawables = new ArrayList<>();
for (Field field :
    drawableClass.getDeclaredFields()) {
    int value = field.getInt(instance);
    drawables.add(value);
}
public static List<Integer> getDrawablesList() throws IllegalAccessException, InvocationTargetException, InstantiationException {
    Class<R.drawable> drawableClass = R.drawable.class;
    R.drawable instance = (R.drawable) drawableClass.getDeclaredConstructors()[0].newInstance();
    List<Integer> drawables = new ArrayList<>();
    for (Field field :
            drawableClass.getDeclaredFields()) {
        int value = field.getInt(instance);
        drawables.add(value);
    }
    return drawables;
}

(需要“org.jetbrains.kotlin:kotlin-reflect:your_kotlin_version”依赖项)

private fun getDrawablesList() : List<Int> {
    val drawableClass = R.drawable::class
    val instance = drawableClass.constructors.first().call()
    val drawablesList = mutableListOf<Int>()
    for (field in instance.javaClass.declaredFields) {
        val test = field.getInt(instance)
        drawablesList.add(test)
    }
    return drawablesList
}
 类似资料:
  • 问题内容: Go的范围可以遍历地图和切片,但是我想知道是否有一种方法可以遍历一系列数字,例如: 还是有一种方法可以像Go语言中的Ruby 类那样在Go中表示整数范围? 问题答案: 您可以并且应该只编写一个for循环。简单,明显的代码就是Go方式。

  • 我的方法取得了90%的成功,但当响应在一个子键中有多个条目时,逻辑就会失败,我无法将一个通用逻辑放在适当的位置,该逻辑将在所有情况下运行。 响应样本为 现在,我的用例说您搜索John文本,然后items数组将包含许多对象,这些对象的项是。名称或项目。部分。说明应包含“John”关键字 我放置的匹配逻辑运行良好,因为我正在迭代项[]。名称和项目。第[]节。描述 主要的挑战来自于[*]节。说明包含如下

  • 我使用以下行对Sqlite查询的行进行循环。 当行数大约为15000时,需要很长时间。空的块需要大约4秒,而有一些代码的

  • 问题内容: 为什么?将迭代器项指针移到第一位置的最佳方法是什么? 问题答案: 为什么? 因为如果强制迭代器具有重置方法,则 每个 迭代器都必须具有重置方法。这给每个迭代器编写者额外的工作。再加上一些迭代器确实很难重置(或者真的很昂贵),并且您不希望用户对其调用reset。文件或流上的迭代器就是很好的例子。 将迭代器项指针移到第一位置的最佳方法是什么? 创建一个新的迭代器。它很少比重置昂贵。

  • 问题内容: 内容: 我想说的是: 问题答案: 一种方法是手动处理此问题: 使用包装(扩展) 只要设置了值,就保留()线程和值 或者,通过一些反射(和),您可以: 呼叫 调用(针对上述每个线程) 呼叫 第一是更优选的。

  • 我试图解决这个问题:“2520是最小的数字,可以被1到10的每个数字除,没有任何余数。 可以被1到20的所有数字整除的最小正数是多少?" 请不要告诉我答案,我真的很想自己解决。我只需要一个关于问题数学方面的建议。问题是每个周期添加一个不是一个好主意,因为这个过程太慢了。或者变量类型不长的问题? 我试图得到(1到10)和(1到17)之间所有数字的等分数,该算法运行良好。 我期望得到特定的整数,但得到