看来整数变量i是不可见的

时间:2011-10-18 17:03:18

标签: java android

for (int i = 0; i < 9; i++)
{
    b[i].setOnClickListener(
        new OnClickListener()
        {
            public void onClick(View v)
            {
                justclicked(i);
            }
        }

    );
}

我试图使用for循环在九个按钮上放置一个动作侦听器。上面的代码给了我一个错误。由i的值引起的错误是不可见的吗?非常感谢,世界级专家@ Stack Overflow !!

5 个答案:

答案 0 :(得分:6)

不,这是因为i不是最终的,必须从匿名内部类访问。 添加

final int finalI = i;

b[i].setOnClickListener( ...

然后使用finalI代替ijustclicked(finalI);

之后,请为ifinalI提供一个更好的名称。

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