Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将“i”从for循环传递到for循环中的onclicklistener事件中_Android_Android Studio - Fatal编程技术网

Android 将“i”从for循环传递到for循环中的onclicklistener事件中

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 &

我想将I从这个for循环传递到我在for循环中创建的onclicklisteners中,但是我得到了一个错误,因为我不是final,我尝试将I存储在另一个final变量中,但没有成功,我不能将I初始化为final,因为它需要明显地更改

我该怎么做?我希望能够从传入方法的按钮数组中获取按钮[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) {