在循环中按名称访问变量

Bal*_*des 8 java android

我正在开发一个Android项目,我有很多可绘制的东西.这些绘图资源都命名为喜欢的icon_0.png,icon_1.png... icon_100.png.我想将这些drawable的所有资源id添加到Integers的ArrayList中.(对于那些不了解android的人,只有Java,我在谈论静态变量,在类的静态内部类中,就像R.drawable.icon_0.所有这些静态变量都是整数.)

有没有更有效的方法来做到这一点,而不是逐个添加它们?喜欢

ArrayList<Integer> list = new ArrayList<Integer>();
list.add(R.drawable.icon_1);
list.add(R.drawable.icon_2);
...
list.add(R.drawable.icon_100);
Run Code Online (Sandbox Code Playgroud)

我可以以某种方式循环它们吗?喜欢

for(int i=0; i<100; i++)
{
    list.add(R.drawable.icon_+i);  //<--- I know this doesn't work.
}
Run Code Online (Sandbox Code Playgroud)

我无法控制这些静态整数所在的文件,并且我无法在运行时创建drawable.

任何帮助,将不胜感激!

编辑

好吧,我读了答案,但我有一个主要问题:我无法访问任何Context需要创建此数组/ id列表的实例(我在静态初始化块中执行),因此getResources()方法,建议的两个答案不会起作用.有没有其他方法这样做?

nul*_*ent 0

一种方法是使用反射 API。

沿着线的东西...

Field[] fields =  R.drawable.class.getFields();
List<String> names = new ArrayList<String>(); 
for (Field field : fields) {
    if(field.getName().startsWith("icon")) 
       names.add(field.getName());    
}

int resid = getResources().getIdentifier(names.get(0), "drawable", "com.org.bla");
Run Code Online (Sandbox Code Playgroud)

我还没有测试过这个,但你明白了。