0

不知道为什么在我的代码中会发生这种情况,据我所知应该没问题,尽管我整天都在这样做。

我的问题是我的计数在选中复选框时增加或在未选中时减少,最多允许 4 个选项,并发出警告说您不能选择第 5 个。

选择 1-3 工作正常 - 我将变量输出到 log cat 并且它上下运行良好但是一旦我按下第四个选项并按下第 5 个它允许它在我说过的地方premCount<=4

警报在第 6 次按下时显示,但允许用户关闭然后再次选择它,并且在不应该时继续。

这是我的代码:

public void handlePremCheckboxClick(View v){
    CheckBox tmpChkBox = (CheckBox) findViewById(v.getId());
    if (premCounter<=4){ <---this part is allowing 5, 6, 7, etc presses through
        if(tmpChkBox.isChecked())
        {
            tmpChkBox.setBackgroundColor(Color.parseColor("#ff33b5e5"));
            premCounter++;
        }
        if(tmpChkBox.isChecked()== false)
        {
            tmpChkBox.setBackgroundColor(Color.TRANSPARENT);
            premCounter--;
        }
    }else if(premCounter >4) {
        tmpChkBox.setChecked(false);
        tmpChkBox.setBackgroundColor(Color.TRANSPARENT);
        premCounter--;

        AlertDialog.Builder alert = new AlertDialog.Builder(this);
        alert.setTitle("Max Teams Reached")
        .setMessage("You have selected the max of 4 Premiership teams")
        .setPositiveButton("OK", null)
        .show(); 
    }   
    System.out.println(premCounter);

}

日志猫:

10-18 17:10:58.859: D/OpenGLRenderer(25923): Enabling debug mode 0
10-18 17:11:06.146: D/dalvikvm(25923): GC_FOR_ALLOC freed 125K, 2% free 9286K/9448K, paused 17ms, total 17ms
10-18 17:11:06.377: W/IInputConnectionWrapper(25923): finishComposingText on inactive InputConnection
10-18 17:11:07.258: I/System.out(25923): 1
10-18 17:11:07.488: I/System.out(25923): 2
10-18 17:11:07.748: I/System.out(25923): 3
10-18 17:11:08.039: I/System.out(25923): 2
10-18 17:11:08.689: I/System.out(25923): 3
10-18 17:11:08.939: I/System.out(25923): 4
10-18 17:11:09.240: I/System.out(25923): 5
10-18 17:11:09.550: I/System.out(25923): 4
10-18 17:11:10.461: I/System.out(25923): 5
10-18 17:11:10.801: I/System.out(25923): 4
10-18 17:11:11.843: I/System.out(25923): 5
10-18 17:11:12.483: I/System.out(25923): 4
10-18 17:11:13.444: I/System.out(25923): 5
10-18 17:11:13.695: I/System.out(25923): 4
10-18 17:11:14.706: I/System.out(25923): 5
10-18 17:11:15.086: I/System.out(25923): 4
10-18 17:11:16.217: I/System.out(25923): 5
4

1 回答 1

1

我认为有几件事我可以看到:

首先,您要初始化premCounter为 0?这意味着它将允许:0, 1, 2, 3, 4这是五个项目..

第二,你减量premCounterelse。你不应该这样做。如果 4 个项目已被选中 ( premCounter>=4),则如果复选框已被选中,则允许取消选中并递减计数器。如果尚未检查,则显示警报(如现在尝试检查新项目)

所以基本上这应该有效:

public void handlePremCheckboxClick(View v)
{
    CheckBox tmpChkBox = (CheckBox) findViewById(v.getId());
    if (premCounter < 4) {
        if (tmpChkBox.isChecked()) {
            tmpChkBox.setBackgroundColor(Color.parseColor("#ff33b5e5"));
            premCounter++;
        }
        if (tmpChkBox.isChecked() == false) {
            tmpChkBox.setBackgroundColor(Color.TRANSPARENT);
            premCounter--;
        }
    }
    else { // 4 have already been checked, now only allow unchecking.
        tmpChkBox.setChecked(false);
        tmpChkBox.setBackgroundColor(Color.TRANSPARENT);
        if (!tmpChkBox.isChecked()) {
            premCounter--;
        }
        else {
            AlertDialog.Builder alert = new AlertDialog.Builder(this);
            alert.setTitle("Max Teams Reached")
                    .setMessage("You have selected the max of 4 Premiership teams")
                    .setPositiveButton("OK", null)
                    .show();
        }
    }
    System.out.println(premCounter);

}

更新:我在以前的版本中将检查错误。解释仍然是一样的。

于 2013-10-18T16:20:00.210 回答