Ale*_*amo 2 variables android loops event-handling inner-classes
我已经以编程方式创建了4个无线电组.问题来了,当我尝试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]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
错误是: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或者如何访问标题中内部类中的变量),只需将值复制i到另一个最终值(例如j)即可清除此问题.然后使用内部类中复制的一个.
final int j = i;
finishButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
radioGroup[j].clearCheck();
}
});
Run Code Online (Sandbox Code Playgroud)
经常使用这种技术.
对于下一个问题:clearCheck()仅适用于第4个无线电组.这是因为你可以设置一个单一OnClickListener的finishButton一次.这是第四组的最后一组仅有效.
所以你应该只设置一个OnClickListener,在监听器中你可以调用clearCheck所有的RadioGroups.然后下面将解决您的问题.
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();
}
}
});
Run Code Online (Sandbox Code Playgroud)
请注意,所以这个解决方案更基本上清除了你的问题,清除local variable i is accessed from within inner class; needs to be declared final错误,所以我不再需要上面建议的第一个解决方案.您不需要再访问标题中内部类中的变量.
| 归档时间: |
|
| 查看次数: |
1220 次 |
| 最近记录: |