在 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 :)
}
}
在 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 :)
}
}