变量是从内部类中访问的,需要声明为final

时间:2015-05-13 12:48:22

标签: android checkbox inner-classes final

我正在使用多个复选框,需要在检查时执行不同的操作,即根据所选的复选框增加一些静态变量。

所以问题是我不能让变量i成为final(使用循环),否则它在内部类中是不可访问的。 有什么解决方案可以解决吗?

  for (int i = 1; i <= 99; i++)

    {
        int ids = Integer.parseInt("R.id.s" + i);

        seats[i] = (CheckBox) findViewById(ids);
        seats[i].setWidth(15);
        seats[i].setHeight(16);

        seats[i].setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if(i<=33)
                    SelectSeat.ROYAL++;

                if(i<=77 && i>33)
                SelectSeat.PLAT++;

                else
                    SelectSeat.GOLD++;
            }
        });
    }

1 个答案:

答案 0 :(得分:2)

使用以下代码替换您的代码:

for (int i = 1; i <= 99; i++)

    {
        int ids = Integer.parseInt("R.id.s" + i);

        seats[i] = (CheckBox) findViewById(ids);
        seats[i].setWidth(15);
        seats[i].setHeight(16);

        final int finalI = i;
        seats[i].setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if(finalI <=33)
                    SelectSeat.ROYAL++;

                if(finalI <=77 && finalI >33)
                    SelectSeat.PLAT++;

                else
                    SelectSeat.GOLD++;
            }
        });
    }

这可以解决您的问题。

我在这里做的是将你的i复制到每个循环中的最后一个finalI,并在内部类中使用finalI而不是i