【发布时间】:2010-01-09 00:51:34
【问题描述】:
我正在尝试通过 for 循环设置大量 OnClickListener。每个视图在点击时都应该运行一个方法; view 0 应该运行值为 0 的方法,view 1 应该运行值为 1 的方法,等等。
但是,如果我使用通过 for 循环递增的变量来声明 OnClickListener,则 OnClickListener 会记住对变量的引用,而不是变量在声明时的值。
这可能不是很清楚 - 这是代码:
for (int i = 0; i < 20; i++) {
cells[i] = (ImageView) findViewById(cellIDs[i]);
cells[cellnumber++].setOnClickListener(new OnClickListener() {
public void onClick(View v){
cellClicked(cellnumber, v);
}
});
}
这为每个单元格正确设置了 OnClickListeners,但无论单击哪个单元格,它总是运行值为 21 的 cellClicked 调用。
我知道我可以使用 cell[0] 手动设置 OnClickListeners。 . . cellClicked(0, v), 但是有没有办法让 ClickListener 传递变量的值而不是 for 循环中对变量的引用?
(我看到一些页面说 Java 通常通过传递值而不是引用来运行,但我认为 Android 库以某种方式做不同的事情,因此我在这里遇到了困难。)
【问题讨论】: