从For循环设置ImageView

时间:2013-05-07 20:08:51

标签: java android input imageview

这个问题可能有点棘手。我试过,但我真的不确定要搜索什么,所以我没有找到任何关于此的文档。

我有一个7x10网格,每个网格都有自己的图像视图。网格的ImageViews命名为grid00,grid01,...,grid79,grid710。我想在嵌套for循环中更改每个网格的图像。所以在我的代码中说的是:

grid04.setImageResource(R.drawable.walllr);

我真正希望它做的是:

gridij.setImageResource(R.drawable.walllr);

其中 i j 在单词网格之后是来自嵌套for循环的 i j

我正在尝试更改所有70个项目的图像,而不为70个项目中的每个项目编写代码。这可能吗?这是代码:

public void initialize() {
    map = DM.getMap();
    for (int i = 0; i < 7; i++) {
        for (int j = 0; j < 10; j++) {
            if (map[i][j].isUsed()) {
                grid04.setImageResource(R.drawable.walllr);
            }
        }
    }
}

4 个答案:

答案 0 :(得分:3)

您没有提到那些名为ImageViews的{​​{1}}。如果gridxx代表xml布局中gridxx的ID,那么您可以使用:

ImageView

请记住,for (int i = 0; i < 7; i++) { for (int j = 0; j < 10; j++) { if (map[i][j].isUsed()) { int id = getIdentifier("grid" + i + j, "id", getPackageName()); ((ImageView)findViewById(id)).setImageResource(R.drawable.walllr); } } } 方法有点慢。 如果由于某些奇怪的原因,这些是java类中使用的名称,解决方案是使用像普通人一样的数组。

答案 1 :(得分:2)

Imageview[][] grid = new Imageview[7][10];
for(int i = 0; i <= 7; i++)   
        for(int j = 0; j <= 10; j++) //from 0 to 10, dunno if you want it from 1 to 10
         {
           grid[i][j]=new Imageview(....)
         }

这是改变所有网格的唯一方法,就像你想做的那样。首先,创建网格。它们将不再被称为grid04左右,而是grid[0][4].

答案 2 :(得分:1)

您可以创建一个ImageViews数组。

Imageview[] myImageViewArray = new ImageView[70];
int imageViewCounter=0;

and in your function

public void initialize() {
    map = DM.getMap();
    for (int i = 0; i < 7; i++) {
        for (int j = 0; j < 10; j++) {
            if (map[i][j].isUsed()) {
                myImageViewArray[imageViewCounter]=new ImageView();
                myImageViewArray[imageViewCounter].setImageResource(R.drawable.walllr);
                imageViewCounter++;
            }
        }
    }
}

你可以用这种方式。但是在使用函数之前应该修改它。希望这会有所帮助。

答案 3 :(得分:0)

创建一个ImageView [7] [10]的2D数组。