在 Kotlin 中将单选按钮数据发送到下一个 activity

Sending radio button data to next activity in Kotlin

在 android 应用程序中,我想让用户检查单选按钮,并根据用户检查的内容,我希望它在下一个 activity 中更改内容(例如隐藏按钮或更改按钮的文本)。我该怎么做?

我已经在接下来的 activity 中找到了如何让它更改文本视图,但可能还有更好的方法。

val rg1 = findViewById<RadioGroup>(R.id.rg1)
val rb1 = findViewById<RadioButton>(R.id.rb1)
val rb2 = findViewById<RadioButton>(R.id.rb2)
val tv1 = findViewById<TextView>(R.id.tv1)
val btnNext = findViewById<Button>(R.id.btnNext)

rg1.setOnCheckedChangeListener(RadioGroup.OnCheckedChangeListener { _, i ->
            when (i) {
                R.id.rb1 -> tv1.text = "something"
                R.id.rb2 -> tv1.text = "something else"
            }
        })

btnNext.setOnClickListener {
                    val result = tv1.text.toString()
                    val intent = Intent(this, Activity2::class.java)
                    intent.putExtra("Result", result)
                    startActivity(intent)
                }

tv1.isGone = true

在 Activity2 中执行此操作后:

val result = intent.getStringExtra("Result")
val tv2 = findViewById<TextView>(R.id.tv2)
tv2.text = result

它更改了 Activity2 中的 tv2(tv1 仅用于获取文本字符串,不应显示在第一个 activity 中,正如我之前所说,可能还有更好的解决方案)。 但最重要的是,当我想隐藏按钮或在下一个 activity 中根据单选按钮做其他事情时该怎么做?

不确定这是否是您问题的答案,但考虑一下:

你可以改变

rg1.setOnCheckedChangeListener(RadioGroup.OnCheckedChangeListener { _, i ->
            when (i) {
                R.id.rb1 -> tv1.text = "something"
                R.id.rb2 -> tv1.text = "something else"
            }
        })

像这样的东西

rg1.setOnCheckedChangeListener(RadioGroup.OnCheckedChangeListener { _, i ->
            when (i) {
                R.id.rb1 -> OneSetupOfYourUI()
                R.id.rb2 -> AnotherSetupOfYourUI()
            }
        })

然后在函数内部定义要更改的内容并调用这些函数,而不是更改每个组件。

fun OneSetupOfYourUI(){
//change stuff in here
}

也许这有帮助?

然后当你开始新的 activity :

val result = tv1.text.toString()
val intent = Intent(this, Activity2::class.java)
intent.putExtra("Result", result)
startActivity(intent)

考虑根据您配置的 UI 或用户选择的内容添加多个 intent.putExtra() 语句

编辑

对于任何感兴趣或不确定的人,您也可以在 when 声明中简单地执行此操作:

when (i) {
    R.id.rb1 -> {
    tv1.text = "something"
    etc.
    //now you can do several statements here :)
    }
 }