【问题标题】:Kotlin RadioButton comparison AndroidKotlin RadioButton 对比 Android
【发布时间】:2021-06-22 03:44:36
【问题描述】:

我正在尝试获取用户选择的单选按钮并将他们的选择与正确答案进行比较。 例如,您有 4 个选项,其中 1 个是正确的,如何比较它们? 下面是我的 Kotlin 代码

var rganswers1 = findViewById<RadioGroup>(R.id.rganswers1)
        var btnSubmit = findViewById<Button>(R.id.btnSubmit)

        btnSubmit.setOnClickListener(View.OnClickListener {
            var rbq1a1 = findViewById<RadioButton>(R.id.rbq1a1)
            var rbq1a2 = findViewById<RadioButton>(R.id.rbq1a2)
            var rbq1a3 = findViewById<RadioButton>(R.id.rbq1a3)
            var rbq1a4 = findViewById<RadioButton>(R.id.rbq1a4)

            var selectedAnswer = rganswers1.checkedRadioButtonId
            if (selectedAnswer.equals(rbq1a3)) {
                Toast.makeText(this, "Correct", Toast.LENGTH_SHORT).show()
            }else{
                Toast.makeText(this, "False", Toast.LENGTH_SHORT).show()
            }

        })

【问题讨论】:

    标签: android kotlin radio-button


    【解决方案1】:

    您在 if 语句中的问题是将视图 ID 与视图本身进行比较,因此它们永远不可能相等。

    但是,您不需要列出所有这些单选按钮视图,也不需要详尽的 when 语句。您的整个代码可以简化为:

    btnSubmit.setOnClickListener {
        val response = when(rganswers1.checkedRadioButtonId) {
            R.id.rbq1a3 -> "Correct" 
            else -> "false"
        }
        Toast.makeText(this, response, Toast.LENGTH_SHORT).show()
    }
    

    【讨论】:

      【解决方案2】:

      解决了。 只需要使用when() 语句并给每个答案一个返回值。

      var rganswers1 = findViewById<RadioGroup>(R.id.rganswers1)
              var btnSubmit = findViewById<Button>(R.id.btnSubmit)
      
              btnSubmit.setOnClickListener(View.OnClickListener {
      
      
                  var selectedAnswer = rganswers1.checkedRadioButtonId
      
                  when(selectedAnswer){
                      R.id.rbq1a1 ->{Toast.makeText(this, "False", Toast.LENGTH_SHORT).show()}
                      R.id.rbq1a2 ->{Toast.makeText(this, "False", Toast.LENGTH_SHORT).show()}
                      R.id.rbq1a3 ->{Toast.makeText(this, "Correct", Toast.LENGTH_SHORT).show()}
                      R.id.rbq1a4 ->{Toast.makeText(this, "False", Toast.LENGTH_SHORT).show()}
                  }
      
      
              })
      

      【讨论】:

      • 如果您将selectedAnswer.equals(rbq1a3) 简单地替换为selectedAnswer.equals(R.id.rbq1a3)(更正确的是selectedAnswer == R.id.rbq1a3),您的原始代码会更好。这是非常冗长和重复的代码。如果您发现自己不止一次地复制粘贴代码行并进行了小幅更改,则应重新考虑如何减少重复次数,以便更易于阅读和维护。
      • 感谢您的评论,我只是一个正在努力学习的新手。我会记住这一点的!
      猜你喜欢
      • 2019-10-01
      • 2021-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-18
      • 2020-12-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多