如何访问 inner class Android 中的变量
How access to a variable within inner class Android
我已经以编程方式创建了 4 个广播组。问题来了,当我尝试通过内部 class 使用 setOnClickListener
时,它需要访问用于声明无线电组的循环的迭代变量 (i)。我也试过让迭代器变量为 final,但没有用。我需要设置所有 4 个无线电组 clearCheck()
。这是我的代码:
public class MainActivity extends AppCompatActivity {
**RadioGroup[] radioGroup;**
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
radioGroup = new RadioGroup[4];
for (int i = 0; i < 4; i++) {
radioGroup[i] = new RadioGroup(this);
finishButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
**radioGroup[i].clearCheck();**
}
});
linearLayout.addView(radioGroup[i]);
}
}
}
错误是:local variable i is accessed from within inner class; needs to be declared final
谢谢!
对于第一个问题:local variable i is accessed from within inner class; needs to be declared final
(或如何访问内部变量class在标题中),您可以通过将 i
的值复制到另一个最终变量(例如 j
)来解决这个问题。然后在里面使用复制的class.
final int j = i;
finishButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
radioGroup[j].clearCheck();
}
});
这种技术经常使用。
下一题:clearCheck()
只应用于第4个单选组。这是因为您可以一次将单个 OnClickListener
设置为 finishButton
。即第四组最后一盘有效
因此您应该只设置一个 OnClickListener
,并且在侦听器中您可以为所有 RadioGroup 调用 clearCheck
。那么下面将解决您的问题。
radioGroup = new RadioGroup[4];
for (int i = 0; i < 4; i++) {
radioGroup[i] = new RadioGroup(this);
linearLayout.addView(radioGroup[i]);
}
finishButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for (int i = 0; i < 4; i++) {
radioGroup[i].clearCheck();
}
}
});
请注意,此解决方案更基本地解决了您的问题,解决了 local variable i is accessed from within inner class; needs to be declared final
错误,因此不再需要我上面建议的第一个解决方案。您不再需要 访问标题中内部 class 中的变量。
我已经以编程方式创建了 4 个广播组。问题来了,当我尝试通过内部 class 使用 setOnClickListener
时,它需要访问用于声明无线电组的循环的迭代变量 (i)。我也试过让迭代器变量为 final,但没有用。我需要设置所有 4 个无线电组 clearCheck()
。这是我的代码:
public class MainActivity extends AppCompatActivity {
**RadioGroup[] radioGroup;**
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
radioGroup = new RadioGroup[4];
for (int i = 0; i < 4; i++) {
radioGroup[i] = new RadioGroup(this);
finishButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
**radioGroup[i].clearCheck();**
}
});
linearLayout.addView(radioGroup[i]);
}
}
}
错误是:local variable i is accessed from within inner class; needs to be declared final
谢谢!
对于第一个问题:local variable i is accessed from within inner class; needs to be declared final
(或如何访问内部变量class在标题中),您可以通过将 i
的值复制到另一个最终变量(例如 j
)来解决这个问题。然后在里面使用复制的class.
final int j = i;
finishButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
radioGroup[j].clearCheck();
}
});
这种技术经常使用。
下一题:clearCheck()
只应用于第4个单选组。这是因为您可以一次将单个 OnClickListener
设置为 finishButton
。即第四组最后一盘有效
因此您应该只设置一个 OnClickListener
,并且在侦听器中您可以为所有 RadioGroup 调用 clearCheck
。那么下面将解决您的问题。
radioGroup = new RadioGroup[4];
for (int i = 0; i < 4; i++) {
radioGroup[i] = new RadioGroup(this);
linearLayout.addView(radioGroup[i]);
}
finishButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for (int i = 0; i < 4; i++) {
radioGroup[i].clearCheck();
}
}
});
请注意,此解决方案更基本地解决了您的问题,解决了 local variable i is accessed from within inner class; needs to be declared final
错误,因此不再需要我上面建议的第一个解决方案。您不再需要 访问标题中内部 class 中的变量。