将多个Drawable存储在带有For循环的ArrayList中

时间:2014-03-03 12:59:58

标签: java android for-loop arraylist drawable

我的项目中有很多图像名为image_0,image_1,image_2 ....目前,为了将它们存储在数组中,我使用

int[] images = {R.drawable.image_0, R.drawable.image_1 ....};

但我有400张图片,这在代码中看起来非常难看,所以我想使用for循环:

ArrayList<Integer> images = new ArrayList<Integer>;
for(int i = 0; i < 400; i++){
   images.add(R.drawable.image_+"i");
}

但他们是Int not String ..我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

你可以像这样处理:

ArrayList<Integer> images = new ArrayList<Integer>;
for(int i = 0; i < 400; i++){
   images.add(getResId(R.drawable.image_+"i", Drawable.class));
}

//method to convert String ID name into Integer value
public static int getResId(String variableName, Class<?> c) {

    try {
        Field idField = c.getDeclaredField(variableName);
        return idField.getInt(idField);
    } catch (Exception e) {
        e.printStackTrace();
        return -1;
    } 
}

原始答案为here

答案 1 :(得分:0)

这可以使用反射来完成:

String name = "image_0";
final Field field = R.drawable.getField(name);
int id = field.getInt(null);
Drawable drawable = getResources().getDrawable(id);

或使用Resources.getIdentifier()

String name = "image_0";
int id = getResources().getIdentifier(name, "drawable", getPackageName());
Drawable drawable = getResources().getDrawable(id);

为了提高内存效率,我仍然建议您将ID存储在String数组中,并仅在需要时获取图像。