Android 将“i”从for循环传递到for循环中的onclicklistener事件中
我想将I从这个for循环传递到我在for循环中创建的onclicklisteners中,但是我得到了一个错误,因为我不是final,我尝试将I存储在另一个final变量中,但没有成功,我不能将I初始化为final,因为它需要明显地更改 我该怎么做?我希望能够从传入方法的按钮数组中获取按钮[I]的文本Android 将“i”从for循环传递到for循环中的onclicklistener事件中,android,android-studio,Android,Android Studio,我想将I从这个for循环传递到我在for循环中创建的onclicklisteners中,但是我得到了一个错误,因为我不是final,我尝试将I存储在另一个final变量中,但没有成功,我不能将I初始化为final,因为它需要明显地更改 我该怎么做?我希望能够从传入方法的按钮数组中获取按钮[I]的文本 public void applyClick(final Button button[], final TextView texty[]) { for (int i = 0; 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;
}
}
}
您需要扩展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
}
}
只需在声明中添加final
for (int j = 0; j < 16; j++) {
final int i=j;
switch(i) {
注意:在android Studio中,如果您正在使用它,只需按Alt+Enter来修复类似的错误,这将自动添加“final”。它将在其他情况下帮助您,例如添加try+catch和许多内容,
请记住:当您遇到这样的错误时,请尝试ALT+ENTER
for (int j = 0; j < 16; j++) {
final int i=j;
switch(i) {