查看以下android代码。
iv11 = (ImageView) findViewById(R.id.immg11);
iv12 = (ImageView) findViewById(R.id.immg12);
iv13 = (ImageView) findViewById(R.id.immg13);
iv14 = (ImageView) findViewById(R.id.immg14);
iv15 = (ImageView) findViewById(R.id.immg15);
iv16 = (ImageView) findViewById(R.id.immg16);
以上6
ImageView
个变量已分配6
张图片。实际上我必须为36个变量做这个。是否可以使用某种for
循环来完成这种赋值?
答案 0 :(得分:1)
如果您的所有ImageView都在相同的布局,那么使用此代码您可以获得ID和ImageView的列表。如果它们不在同一布局中,那么您需要使用嵌套循环。
ArrayList<ImageView> imageList=new ArrayList<ImageView>();
ArrayList<Integer> idList=new ArrayList<Integer>();
LinearLayout ll;
ll=(LinearLayout)findViewById(R.id.layout);
for(int i=0;i<ll.getChildCount();i++){
View v=ll.getChildAt(i);
if(v instanceof ImageView){
imageList.add((ImageView)v);
idList.add(v.getId());
}
}
更新在我建议的情况下,你应该像这样使用嵌套循环
TableLayout tl;
tl=(TableLayout)findViewById(R.id.layout);
for(int i=0;i<tl.getChildCount();i++){
View v=tl.getChildAt(i);
if(v instanceof TableRow){
for(int j=0;j<v.getChildCount();j++){
View innerView=v.getChildAt(j);
if(innerView instanceof ImageView){
imageList.add((ImageView)innerView);
idList.add(innerView.getId());
}
}
}
}
答案 1 :(得分:0)
你可以使用类似RoboGuice之类的东西来缩短代码,但是你不必告诉Android哪个视图id要映射到哪个对象。
答案 2 :(得分:0)
您可以为图像值变量(iv ##)执行此操作但不能对R(R.id.immg ##)生成的int ID执行此操作,因为它们是自动生成的随机十六进制因此,你无论如何都必须手动分配它们,你不能迭代它们。
要将字符串转换为变量,您只需要使用(在本例中)Integer.parseInt(string),并根据您想要的数字类型,它会有所不同。
答案 3 :(得分:0)
我项目的代码:
for( Field f : R.layout.class.getFields() ){
if( f.getName().startsWith( "image" ) ){
try{
IMAGE_MAP.put( f.getName().substring( 4 ).toLowerCase(), f.getInt( null ) );
}catch( IllegalArgumentException e ){
}catch( IllegalAccessException e ){}
}
}