【问题标题】:Click twice to check Radio Button?单击两次以检查单选按钮?
【发布时间】:2013-03-16 17:58:12
【问题描述】:

我正在尝试构建一个测试应用程序,并且我正在使用单选按钮来选择 A、B、C、D。我正在尝试计算结果-> 例如,当按 A 增量 1 时,当按 B 增量 2 时,依此类推。我最初使用的是 Radio Group,但我知道如果用户尝试将他的问题的答案从 A 更改为 B,则增加的结果将是 3,而不是预期的 2。所以我切换到单选按钮并尝试以下代码:

      rb1.setOnCheckedChangeListener(new 
         android.widget.CompoundButton.OnCheckedChangeListener (){ 

        @Override
        public void onCheckedChanged(CompoundButton buttonView,
                boolean isChecked) {
            i++;
            if(rb2.isChecked())
            { 
                i--;
                rb2.setChecked(false);                  
            }

        }
            });

    rb2.setOnCheckedChangeListener(new android.widget.CompoundButton.OnCheckedChangeListener (){


        @Override
        public void onCheckedChanged(CompoundButton buttonView,
                boolean isChecked) {
            i++;

            if(rb1.isChecked())
            { 
                i--;
                rb2.setChecked(false);                          
            }
        }
            });

现在第二个单选按钮必须点击两次才能被选中。这是一个错误,是否可以修复。我需要按钮在第一次单击后更改状态。欢迎所有想法和建议。谢谢。

【问题讨论】:

  • 使用 switch case 来获取选中的单选按钮并根据分配的值。
  • 我用无线电组尝试过,但它仍然分配了两个值。
  • 我对你的问题有点困惑..?首先,您有两个单选按钮 A 和 B,当按下 A 时,您想将数字增加 1,当按下 B 时,您想增加数字 2 对..?当您将增量用于一个实例(即一次)时,增量的用途是什么,因为当您将其更改为 1 到 2 时,只有 2 应该增量..这很令人困惑,请您用场景来说明我
  • 你想用 i 做什么?你能再解释一下吗?
  • 我会尽力解释得更好。例如,您有 10 个问题,每个问题有 2 个选项 A、B。当你按下 A 时,你会增加 CRAZY++,当你按下 B 时,你会增加 NORMAL++。在测验结束时,您可能会得到 CRAZY = 3,NORMAL = 7。但是现在使用该代码,如果用户试图将他的答案从 A 更改为 B,他必须在 B 上单击两次(以便对其进行检查)这将导致在最终结果中添加 2(而不是 1)。我在问如何删除双击和第一次单击后立即更改状态的按钮?结果可能是 NORMAL=8, CRAZY=6 但这不是真正的结果。

标签: android button radio


【解决方案1】:

您可以更改代码以使用 switch 语句(如其中一个 cmets 中所建议的那样),但如果您想继续现有的内容并回答您的问题。在您的 rb2 代码中,您是说如果选中 rb1,则将 rb2 设置为 false。因此,如果您单击 rb1 (现在它已被选中/推送)并且您在第一次取消选中它时单击 rb2,第二次它保持选中状态。

所以坚持你的编码风格和程序:

    public void onCheckedChanged(CompoundButton buttonView,
            boolean isChecked) {
        i++;

        if(rb1.isChecked())
        { 
            i--;
            rb2.setChecked(false);                          
        }
    }

应该是:

    public void onCheckedChanged(CompoundButton buttonView,
            boolean isChecked) {
        i++;

        if(isChecked && rb1.isChecked())
        { 
            i--;
            rb1.setChecked(false);                          
        }

        rb2.setChecked(isChecked);
    }

对您的 rb1 方法进行类似的更改。

【讨论】:

  • 它仍然需要再次单击才能再次更改为已检查。第一次单击它取消选中 rb1,第二次单击 rb2 后变为选中状态。仍然递增两次。你能给我一些关于如何使用 switch 语句完成的指示吗?
  • 哦,这很有趣。 “setChecked”正在调用“onCheckedChanged”。我没有意识到这会发生。因此,当您选中另一个按钮时,它会被“选中”,然后您强制取消选中备用按钮,这反过来会取消选中您刚刚所做的。请参阅我的编辑。至于切换到 switch 语句,您的每个 onCheckedChanged 覆盖都是相同的,但在不同的按钮上工作。你可以打开buttonView。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-15
  • 2011-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多