Android OnClickListener中的Switch语句

时间:2013-07-08 20:27:02

标签: android switch-statement onclicklistener

我在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 ... :
         }
     }
};

1 个答案:

答案 0 :(得分: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]));
             }
         }
     }
};