2013-07-08 2 views
0

Я работаю в Android, пытаясь установить OnClickListeners 10 кнопок. Я могу получить код для работы, как я хочу, чтобы, если я выписывать действие каждого баттона в операторе переключателя, но это большая работа для всего крошечного изменения в каждой из них. Есть ли способ использовать цикл для итерации по случаям переключения?коммутатор Заявление в Android OnClickListener

Приведенный ниже код не будет компилироваться, ошибка в «случае я» говорит «случай выражения должны быть константными выражениями».

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

Вы, вероятно, хотите:

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])); 
      } 
     } 
    } 
}; 
+0

Это последнее, именно то, что я искал, большое вам спасибо! – cjbrooks12

Смежные вопросы