我的项目中有很多图像名为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 ..我怎么能这样做?
答案 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数组中,并仅在需要时获取图像。