从内部 class 访问变量,需要声明为 final
Variable is accessed from within inner class , needs to be declared final
我正在使用多个复选框,需要对选中的复选框执行不同的操作,即根据选中的复选框增加一些静态变量。
所以问题是我不能使变量 i 成为最终变量(使用循环),否则它在内部 class 中不可访问。
有什么解决办法吗?
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++;
}
});
}
用此代码替换您的代码:
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
复制到最终的 int finalI
中,并在内部 [=21] 中使用 finalI
而不是 i
=].
我正在使用多个复选框,需要对选中的复选框执行不同的操作,即根据选中的复选框增加一些静态变量。
所以问题是我不能使变量 i 成为最终变量(使用循环),否则它在内部 class 中不可访问。 有什么解决办法吗?
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++;
}
});
}
用此代码替换您的代码:
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
复制到最终的 int finalI
中,并在内部 [=21] 中使用 finalI
而不是 i
=].