是否可以使用for循环声明多个变量?

时间:2016-01-05 08:51:11

标签: java android variables

我需要使用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);

4 个答案:

答案 0 :(得分:1)

考虑写

ImageView letterViews = new ImageView[14];

for (int n = 0; n < 14; ++n){
    letterViews[n] = (ImageView) this.findViewById(R.id.letters[n]);
}

我还期望对id作为参考的对象进行类似的重构工作:我已将字段letter1letter2等折叠为名为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);