将for循环中的“i”传递给for循环

时间:2015-04-27 00:07:57

标签: android android-studio

我想将“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;
            }
        }
    }

2 个答案:

答案 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