我需要使用similair名称方案声明多个ImageView。我想知道是否有一种方法可以做到这一点,而不需要为每个变量分别设置一行代码。现在我这样做:
ImageView letterView1 = (ImageView) this.findViewById(R.id.letter1);
ImageView letterView2 = (ImageView) this.findViewById(R.id.letter2);
ImageView letterView3 = (ImageView) this.findViewById(R.id.letter3);
ImageView letterView4 = (ImageView) this.findViewById(R.id.letter4);
ImageView letterView5 = (ImageView) this.findViewById(R.id.letter5);
ImageView letterView6 = (ImageView) this.findViewById(R.id.letter6);
ImageView letterView7 = (ImageView) this.findViewById(R.id.letter7);
ImageView letterView8 = (ImageView) this.findViewById(R.id.letter8);
ImageView letterView9 = (ImageView) this.findViewById(R.id.letter9);
ImageView letterView10 = (ImageView) this.findViewById(R.id.letter10);
ImageView letterView11 = (ImageView) this.findViewById(R.id.letter11);
ImageView letterView12 = (ImageView) this.findViewById(R.id.letter12);
ImageView letterView13 = (ImageView) this.findViewById(R.id.letter13);
ImageView letterView14 = (ImageView) this.findViewById(R.id.letter14);
答案 0 :(得分:1)
考虑写
ImageView letterViews = new ImageView[14];
for (int n = 0; n < 14; ++n){
letterViews[n] = (ImageView) this.findViewById(R.id.letters[n]);
}
我还期望对id
作为参考的对象进行类似的重构工作:我已将字段letter1
,letter2
等折叠为名为letters
的数组使用类似于letterViews
的声明。
请注意,Java中的数组从零开始:即大小为14的数组的索引为0到13。
答案 1 :(得分:1)
您在一个页面上声明了14 ImageViews
似乎效率低下,但如果您确实需要这个,那么此代码将适用于您:
for (int i = 1; i <= 14; i++) {
String imageViewId = "letter" + i;
int resId = getResources().getIdentifier(imageViewId, "id", getPackageName());
ImageView imageView = findViewById(resId);
// do what you need to do here
}
P.S。可能有更好的方法来做你需要做的事情而不是宣布14 ImageViews
。
答案 2 :(得分:0)
如果您可以将“R.id.letterX”作为字符串传递:轻松:
$_SESSION
所以,只需重写findViewById方法,将String作为参数
答案 3 :(得分:0)
如果您需要每个ImageView
的密钥,您还可以使用地图。
Map<Integer, ImageView> map = new HashMap<>();
for ( int i = 0; i < 14; i++){
map.put(i, (ImageView) this.findViewById("R.id.letter" + (i+1)));
}
然后按键获取ImageView
:
ImageView imageView = map.get(1);