0

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

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

grid04.setImageResource(R.drawable.walllr);

我真正想做的是:

gridij.setImageResource(R.drawable.walllr);

其中网格单词后面的ij是嵌套 for 循环中的ij 。

我正在尝试更改所有 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

4 回答 4

3

你没有提到那些被ImageViews命名的在哪里gridxx。如果gridxx代表ImageViewxml 布局中的 id,那么您可以使用:

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);
        }
    }
}

请记住,该getIdentifier()方法有点慢。如果出于某种奇怪的原因,这些是 java 类中使用的名称,则解决方案是像普通人一样使用数组。

于 2013-05-07T20:18:43.983 回答
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].

于 2013-05-07T20:18:38.820 回答
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++;
            }
        }
    }
}

你可以使用这种方式。但是您应该在用于您的功能之前对其进行修改。希望这可以帮助。

于 2013-05-07T20:20:22.520 回答
0

创建一个 ImageView[7][10] 的二维数组。

于 2013-05-07T20:17:48.337 回答