for (int i = 0; i < 9; i++)
{
b[i].setOnClickListener(
new OnClickListener()
{
public void onClick(View v)
{
justclicked(i);
}
}
);
}
我试图使用for循环在九个按钮上放置一个动作侦听器。上面的代码给了我一个错误。由i的值引起的错误是不可见的吗?非常感谢,世界级专家@ Stack Overflow !!
答案 0 :(得分:6)
不,这是因为i
不是最终的,必须从匿名内部类访问。
添加
final int finalI = i;
前
b[i].setOnClickListener( ...
然后使用finalI
代替i
:justclicked(finalI);
。
之后,请为i
和finalI
提供一个更好的名称。
答案 1 :(得分:2)
使用i作为构造函数参数创建一个实现OnClickListener的类,并使用它来设置侦听器。
答案 2 :(得分:1)
如果您想使用“标记”路线,可以使用以下内容:
for (int i = 0; i < b.length; i++) {
b[i].setTag(i);
b[i].setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v)
{
int value = Integer.parseInt(v.getTag().toString());
justclicked(value);
}
});
}
答案 3 :(得分:0)
for(int i = 0; i<9;i++) {
// use j for justclicked
final int j = i;
b[i].setOnClickListener(
new OnClickListener()
{
public void onClick(View v)
{
justclicked(j);
}
}
);
答案 4 :(得分:0)
为什么不使用视图的属性来访问索引(如果必须)。 例如,您可以使用 setTag()方法
v.setTag(index)
和
public void onClick(View v)
{
int index = (int)v.getTag();
justClicked(index);
}