【问题标题】:Switch Statement in Android OnClickListenerAndroid OnClickListener 中的 Switch 语句
【发布时间】:2013-07-08 20:27:01
【问题描述】:

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

下面的代码将无法编译,“case i”处的错误是“case expression must be constant expressions”。

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

【问题讨论】:

    标签: android switch-statement onclicklistener


    【解决方案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]));
                 }
             }
         }
    };
    

    【讨论】:

    • 最后一个正是我要找的,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    • 2013-09-24
    • 1970-01-01
    相关资源
    最近更新 更多