You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio中如何根据单选按钮选择展示周长/面积计算结果?

解决Android单选按钮选择后无计算结果的问题

核心问题梳理

  • 错误获取RadioGroup的text属性:RadioGroup本身没有文本属性,你需要的是判断哪个RadioButton被选中,而非传递RadioGroup的无效文本。
  • Intent传递冗余错误数据:不需要传递整个RadioGroup和按钮文本,只需传递用户选择的计算类型标识(比如"perimeter"或"area")即可。
  • 字符串直接参与运算:从Intent拿到的长度、宽度是String类型,必须先转成数值类型(Int/Double)才能做数学计算。
  • 未处理空值与非法输入:用户可能未输入内容或输入非数字,直接计算会触发异常。

修正后的MainActivity代码

// 获取用户输入的长度和宽度,去除首尾空格
val lengthStr = binding.edtTxtLength.text.toString().trim()
val widthStr = binding.edtTxtWidth.text.toString().trim()

// 先校验输入是否完整
if (lengthStr.isEmpty() || widthStr.isEmpty()) {
    Toast.makeText(this, "请输入长度和宽度", Toast.LENGTH_SHORT).show()
    return
}

// 判断选中的单选按钮,确定计算类型
val calculationType = when {
    binding.radioButton1.isChecked -> "perimeter" // 假设radioButton1对应周长选项
    binding.radioButton2.isChecked -> "area"      // radioButton2对应面积选项
    else -> {
        Toast.makeText(this, "请选择计算类型", Toast.LENGTH_SHORT).show()
        return
    }
}

// 构建Intent并传递必要数据
val intent = Intent(this, CalculationActivity::class.java)
intent.putExtra("CALCULATION_TYPE", calculationType)
intent.putExtra("LENGTH", lengthStr)
intent.putExtra("WIDTH", widthStr)
startActivity(intent)

修正后的计算Activity代码(命名为CalculationActivity.kt)

// 从Intent中取出传递的数据
val calculationType = intent.getStringExtra("CALCULATION_TYPE")
val lengthStr = intent.getStringExtra("LENGTH")
val widthStr = intent.getStringExtra("WIDTH")

// 处理数据转换与计算逻辑,捕获非数字输入异常
try {
    val length = lengthStr?.toDouble() ?: 0.0
    val width = widthStr?.toDouble() ?: 0.0

    when (calculationType) {
        "perimeter" -> {
            val perimeter = 2 * (length + width)
            binding.textArea.text = buildString {
                append("周长\n\n")
                append("结果: $perimeter")
            }
        }
        "area" -> {
            val area = length * width
            binding.textArea.text = buildString {
                append("面积\n\n")
                append("结果: $area")
            }
        }
        else -> binding.textArea.text = "请选择正确的计算类型"
    }
} catch (e: NumberFormatException) {
    binding.textArea.text = "请输入有效的数字"
}

关键细节说明

  • View Binding判断单选按钮状态:Kotlin中直接用binding.radioButtonId.isChecked获取选中状态(Java写法是isChecked(),Kotlin简化为属性调用)。
  • Intent传递优化:只传递必要的计算类型和数值字符串,避免传递控件相关的冗余数据。
  • 异常处理:通过try-catch捕获数字转换异常,避免程序崩溃,同时给用户明确的错误提示。

内容的提问来源于stack exchange,提问作者EJ Lin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 19:47:26