我想将“i”从这个for循环传递到我正在for循环中创建的onclicklisteners,但是我得到一个错误,因为我不是“最终”我尝试将i存储在另一个最终变量,但没有成功,我不能只是初始化我作为最终,因为它需要明显改变。
我该怎么做?我希望能够从传递给方法
的按钮数组中的button [i]中获取文本public void applyClick(final Button button[], final TextView texty[]) {
for (int i = 0; i < 16; i++) {
switch(i) {
case 0:case 1:case 2:case 3: {
button[i].setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
int c = getChange(button[0].getText().toString());
Toast.makeText(getApplicationContext(), "" + button[i].getText().toString(), Toast.LENGTH_LONG).show();
int m = Integer.parseInt(texty[0].getText().toString())+c;
texty[0].setText("" + m);
if (m <= 0) {
Toast.makeText(getApplicationContext(), "Player 1 Loses!", Toast.LENGTH_LONG).show();
}
}
});
}
break;
case 4:case 5:case 6:case 7: {
button[i].setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
int c = getChange(button[i].getText().toString());
int m = Integer.parseInt(texty[1].getText().toString())+c;
texty[1].setText("" + m);
if (m <= 0) {
Toast.makeText(getApplicationContext(), "Player 2 Loses!", Toast.LENGTH_LONG).show();
}
})
});
}
break;
case 8:case 9:case 10:case 11: {
button[i].setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
int c = getChange(button[i].getText().toString());
int m = Integer.parseInt(texty[2].getText().toString())+c;
texty[2].setText("" + m);
if (m <= 0) {
Toast.makeText(getApplicationContext(), "Player 3 Loses!", Toast.LENGTH_LONG).show();
}
}
});
}
break;
case 12:case 13:case 14:case 15: {
button[i].setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
int c = getChange(button[i].getText().toString());
int m = Integer.parseInt(texty[3].getText().toString())+c;
texty[3].setText("" + m);
if (m <= 0) {
Toast.makeText(getApplicationContext(), "Player 4 Loses!", Toast.LENGTH_LONG).show();
}
}
});
}
break;
}
}
}
答案 0 :(得分:0)
您需要扩展OnClickListener并使用创建构造函数 一个int参数。
public class ParameterizedOnClickListener implements OnClickListener
{
int mIntValue;
public ParameterizedOnClickListener(int mIntValue)
{
this.mIntValue= mIntValue;
}
@Override
public void onClick(View v)
{
//use your mIntValue
}
}
...
button[i].setOnClickListener( new ParameterizedOnClickListener(i));
答案 1 :(得分:0)
只需在声明
中添加final
即可
for (int j = 0; j < 16; j++) {
final int i=j;
switch(i) {
注意:在android Studio中(如果你正在使用它)只需按Alt
+ Enter
来修复类似的错误,这将自动添加'final'..它会帮助你在其他添加try
+ catch
以及很多内容的情况,
只记得:当你得到像这样的错误时尝试ALT + ENTER