这个问题可能有点棘手。我试过,但我真的不确定要搜索什么,所以我没有找到任何关于此的文档。
我有一个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);
}
}
}
}
答案 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数组。