0

I have a lot of images in my project named image_0, image_1, image_2 .... and currently, for storing them in an array, I use

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

But I have like 400 images and this is very ugly to see in the code so I'd like to use a for cycle like:

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

But they are Int not String.. How can I do that ?

Matteo Cardellini
  • 876
  • 2
  • 17
  • 41

2 Answers2

1

You can deal with it like this :

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;
    } 
}

Original anwer is here.

Community
  • 1
  • 1
Yakiv Mospan
  • 8,174
  • 3
  • 31
  • 35
0

This can be done using reflection:

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

Or using Resources.getIdentifier():

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

For memory efficiency, I'd still recommend you to store the ids in a String array, and get the images only when you need them.

FD_
  • 12,947
  • 4
  • 35
  • 62