我在可绘制文件夹中放置了10个图像,然后我创建了一个自定义类,其中的实例持有一个id Integer,它应该将它引用到draw文件夹中的图像。现在我想知道如何设置这些id-s,而不是一个一个。代替:
object[0].setImage(R.drawable.image1);
object[1].setImage(R.drawable.image2);
我想用循环来做这个,但是怎么做?
答案 0 :(得分:2)
Drawable
ID在final class R
的静态类中生成。因此,只需使用反射来读取这些静态属性的值。如果您想获取Int ID,请使用以下代码:
for(Field f : R.drawable.class.getDeclaredFields()){
if(f.getType() == int.class){
try {
int id = f.getInt(null);
// read the image from the id
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e){
e.printStackTrace();
}
}
}
或者,如果您想直接通过图片搜索'名称,您可能会对以下字段的名称属性感兴趣:
for(Field f : R.drawable.class.getDeclaredFields()){
if(f.getType() == int.class){
try {
String name = f.getName();
// rest of the code handling file loading
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
}
}
答案 1 :(得分:1)
根据我的想法不起作用。
有代码可以通过名称获取drawable。例如:"image"+myNumber"
答案 2 :(得分:0)
请注意,视图列表的大小应与包含ID的列表匹配:
public class HolderIDs {
public List<Integer> _ids;
public HolderIDs() {
_ids = new ArrayList<Integer>(Arrays.asList(R.drawable.one, R.drawable.two, R.ldrawable.three, R.drawable.four));
}
public List<Integer> getIDs() {
return _ids;
}
}
//使用
List<ImageView> views = getYourViews();
List<Integer> ids = new HolderIDs().getIDs();
for (int i = 0; i < ids.size(); i++) {
View view = views.get(i);
if (view == null) return;
int id = ids.get(i);
view.setBackgroundResource(id);
}
答案 3 :(得分:0)
您可以为资源创建一个整数数组:
int resources = [R.drawable.image1,R.drawable.image2,...]
使用bucle将资源设置到对象数组中。