如何创建一个 if-else,除非选择了至少 1 个单选按钮,否则无法传递到其他活动。尝试了太多次,但我仍然不知道

How to create an if-else in which you can not pass to other activity unless at least 1 radiobutton is selected. Tried too times but still I don't know

提问人:paloma agustín 提问时间:10/27/2023 最后编辑:Jonaspaloma agustín 更新时间:10/29/2023 访问量:39

问:

您好,我是 kotlin 的新手,我遇到了一点问题。我正在尝试制作一个按钮,您单击该按钮将传递给其他活动,但前提是选择了三个单选按钮之一。我做了这段代码,但它不起作用:

button.setOnClickListener {
    if (!radioButton1.isChecked || radioButton2.isChecked || radioButton3.isChecked) {
        // throws Toast
    } else {
        val intent = Intent(this, Activity2::class.java)
        startActivity(intent)
    }
}

我不明白我做错了什么。单选按钮位于 radioGroup 内部。

Kotlin if-statement 单选按钮

评论

0赞 Tenfour04 10/27/2023
你的意思是至少一个,还是恰好有一个需要检查,检查哪一个重要吗?
0赞 paloma agustín 10/27/2023
选中哪个 radioButton 并不重要,但必须至少选中 1 个才能继续下一个活动。

答:

0赞 Tenfour04 10/27/2023 #1

if 语句正在检查第一个按钮是否选中,或者第二个或第三个按钮是否被选中。因此,启动活动的唯一条件是选中第一个按钮,而不选中第二个和第三个按钮。

因此,更正后的逻辑是:

button.setOnClickListener {
    if (!radioButton1.isChecked && !radioButton2.isChecked && !radioButton3.isChecked) {
        // throws Toast
    } else {
        val intent = Intent(this, Activity2::class.java)
        startActivity(intent)
    }
}

从语义上讲,你可以把它理解为,“如果第一个按钮没有被选中,第二个按钮没有被选中,第三个按钮没有被选中,则显示 Toast,否则开始活动。

由于这是一种令人困惑的措辞方式,因此我会颠倒 if/else 分支,以便更容易理解。通常更容易考虑没有 nots(运算符)的逻辑。!

button.setOnClickListener {
    if (radioButton1.isChecked || radioButton2.isChecked || radioButton3.isChecked) {
        val intent = Intent(this, Activity2::class.java)
        startActivity(intent)
    } else {
        // show Toast
    }
}

另一种方法是使用列表和函数:any

button.setOnClickListener {
    val radioButtons = listOf(radioButton1, radiouButton2, radioButton3)
    if (radioButtons.any { it.isChecked }) {
        val intent = Intent(this, Activity2::class.java)
        startActivity(intent)
    } else {
        // show Toast
    }
}

评论

0赞 paloma agustín 10/28/2023
非常感谢!我有一段时间无法修复它,我不知道为什么!我使用了你最后一种方法,这是我需要的方法!