【问题标题】:Radiobutton in Android Quiz appAndroid 测验应用程序中的单选按钮
【发布时间】:2023-03-06 14:19:02
【问题描述】:

我正在开发适用于 Android 的测验应用程序,我在 RadioGroup 中使用 RadioButtons。我想实现这一点,当有人检查正确答案(本例为id/krzyzyk)时,分数将增加一分。我做了这段代码:

int score = 2;

public void onRadioButtonClicked(View view) {
    RadioButton radiobutton1 = (RadioButton) findViewById(R.id.krzyzyk);

    if (radiobutton1.isChecked()) {
        score = score + 1;
    }
}

它可以工作,但是当我运行应用程序并单击另一个 RadioButton 并再次单击 id/krzyzyk 时,分数将再次更新。你能帮我解决这个问题吗?

【问题讨论】:

    标签: java android android-radiobutton


    【解决方案1】:

    当用户点击 RadioButton krzyzyk 时,您的代码将始终增加分数。

    如果选择的 RadioButton 正确,我建议您提交答案并转到下一个问题,增加分数。

    将您的代码更改为:

    public void onRadioButtonClicked(View view) {
        // Is the button now checked?
        boolean checked = ((RadioButton) view).isChecked();
    
        // Check which radio button was clicked
        switch(view.getId()) {
            case R.id.correct_answer: // this is id/krzyzyk
                if (checked)
                    score++;
                    // Go to next question
                break;
            case R.id.wrong_answer:
                if (checked)
                    // Go to next question.
                break;
        }
    }
    

    【讨论】:

    • 我之前尝试过这段代码,但它不能正常工作。如果我检查correct_answer 而不是wrong_answer 和再次correct_answer 应用程序将提高分数两次,而不仅仅是一次。
    • 点击任何 RadioButton 后,您应该重定向到下一个问题并清理变量,将布尔值重置为 false,然后等待下一个用户点击。
    • 好的,我找到了解决方案,onResume() 帮助
    【解决方案2】:

    您可以通过setEnabled(boolean) 禁用 RadioButton 或 RadioGroup。

    例如,您可以禁用被选中的单选按钮

    radiobutton1.setEnabled(false);
    

    我建议此时禁用所有单选按钮,以防止用户更改他们的答案。您可以通过在广播组中调用setEnabled(boolean) 来一次性完成所有操作。

    RadioGroup group = (RadioGroup) findViewById(R.id.myRadioGroup);
    group.setEnabled(false);
    

    【讨论】:

      【解决方案3】:

      您已经考虑过您的测验逻辑,当然分数会增加,因为当您选择正确答案并在侦听器中检查时(此方法会在每次单击按钮时调用),结果将是错误的,也许您可​​以尝试当您单击按钮(下一步,检查)或滑动带有问题的片段时进行 isChecked,或者您可以使用一些变量,例如错误正确指示器的标志,

      int m_rightAnswer =0;
      ...
      public void onRadioButtonClicked(View view) {
         RadioButton radiobutton1 = (RadioButton) findViewById(R.id.krzyzyk);
      
          if (radiobutton1.isChecked() && m_rightAnswer==0){
              score = score + 1; m_rightAnswer=1 }
                    }
      

      它只工作一次,当你点击正确的答案时,当你点击任何单选按钮并返回右侧时,你的分数不会改变,但它没有逻辑

      【讨论】:

        最近更新 更多