0

我在 Android 中工作,试图为 10 个按钮设置 OnClickListeners。如果我在 switch 语句中写出每个按钮的操作,我可以让代码按照我想要的方式工作,但是对于每个按钮的微小变化来说,这是很多工作。有没有办法使用循环来遍历开关的情况?

下面的代码将无法编译,“case i”处的错误表示“case 表达式必须是常量表达式”。

private OnClickListener buttonListener = new OnClickListener() {
     @Override
     public void onClick(final View v) {
         for(int i = 0; i < 10; i++) {
             switch(v.getId()) {
             case i:
                 for(int j = 0; j < numberOfPlayers; j++) {
                     if(playersArray[j].isChecked()) {
                         playerScores[j] += i;
                         playersArray[j].setScore(Integer.toString(playerScores[i]));
                     }
                 }
             }
         }
     }
};

这段代码是我试图避免做的,但仍然可以正确编译和运行:

private OnClickListener buttonListener = new OnClickListener() {
     @Override
     public void onClick(final View v) {
         switch(v.getId()) {
         case 0:
             for(int i = 0; i < numberOfPlayers; i++) {
                 if(playersArray[i].isChecked()) {
                     playerScores[i] += possibleValue[0];
                     playersArray[i].setScore(Integer.toString(playerScores[i]));
                 }
             }
             break;
         case 1:
             for(int i = 0; i < numberOfPlayers; i++) {
                 if(playersArray[i].isChecked()) {
                     playerScores[i] += possibleValue[1];
                     playersArray[i].setScore(Integer.toString(playerScores[i]));
                 }
             }
             break;
         case ... :
         }
     }
};
4

1 回答 1

1

你可能想要:

private OnClickListener buttonListener = new OnClickListener() {
     @Override
     public void onClick(final View v) {
         for(int i = 0; i < 10; i++) {
             if (v.getId() == i) {
                 for(int j = 0; j < numberOfPlayers; j++) {
                     if(playersArray[j].isChecked()) {
                         playerScores[j] += i;
                         playersArray[j].setScore(Integer.toString(playerScores[i]));
                     }
                 }
             }
         }
     }
};

或者,如果我理解您的逻辑,这种更直接的方法应该同样有效:

private OnClickListener buttonListener = new OnClickListener() {
     @Override
     public void onClick(final View v) {
         int i = v.getId();
         for(int j = 0; j < numberOfPlayers; j++) {
             if(playersArray[j].isChecked()) {
                 playerScores[j] += i;
                 playersArray[j].setScore(Integer.toString(playerScores[i]));
             }
         }
     }
};
于 2013-07-08T20:28:31.313 回答