android - 如何将选中的单选按钮传递给 Kotlin 中的其他活动
问题描述
对于一个 android 应用程序,我的 MainActivity 中有一个带有三个 RadioButtons(rb1,rb2,rb3) 的 RadioGroup。每个 RadioButton 都会导致另一个活动(Activity1、Activity2、Activity3)。从这三个活动中的任何一个,用户现在都可以通过操作栏转到 SettingActivity。SettingActivity 与我的 MainActivity 具有相同的 RadioGroup。这就是我有多远。
现在的问题是:
在我的 SettingActivity 中,我不希望 RadioGroup 默认处于未选中状态。相反,我想在默认情况下检查用户之前在 MainActivity 中选择的 RadioButton。有没有办法做到这一点,而不必创建多个设置活动,每个活动都有不同的默认按钮?
我的主要活动:
btnContinue.setOnClickListener {
if (rb1.isChecked){
val intent = Intent(this, Activity1::class.java)
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK.or(Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(intent)
}
else if (rb2.isChecked){
val intent = Intent(this, Activity2::class.java)
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK.or(Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(intent)
}
else if (rb3.isChecked){
val intent = Intent(this, Activity3::class.java)
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK.or(Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(intent)
}
else{
Toast.makeText(applicationContext, "Make a selection", Toast.LENGTH_SHORT).show()
}
}
我的活动1、2、3:
override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.actionbar, menu)
return true
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
val id = item.itemId
if (id == R.id.settings) {
val intent = Intent(this,SettingActivity::class.java)
startActivity(intent) }
return super.onOptionsItemSelected(item)
}
我的设置活动:
btnSave.setOnClickListener {
if (rb1.isChecked){
val intent = Intent(this, Activity1::class.java)
startActivity(intent)
}
else if (rb2.isChecked){
val intent = Intent(this, Activity2::class.java)
startActivity(intent)
}
else if (rb3.isChecked){
val intent = Intent(this, Activity3::class.java)
startActivity(intent)
}
}
解决方案
首先,我们创建一个启动活动的“通用”函数。这将删除冗余代码。
private fun startActivity(activity: Class<*>, radioButtonId: Int) {
val intent = Intent(this, activity)
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK.or(Intent.FLAG_ACTIVITY_NEW_TASK)
intent.putExtra("checkedRadioButtonID", radioButtonId)
startActivity(intent)
}
btnContinue.setOnClickListener {
when {
rb1.isChecked -> startActivity(Activity1::class.java, 1)
rb2.isChecked -> startActivity(Activity2::class.java, 2)
rb3.isChecked -> startActivity(Activity3::class.java, 3)
else -> Toast.makeText(applicationContext, "Make a selection", Toast.LENGTH_SHORT).show()
}
}
现在在您的三个活动中,您向每个活动发送了一个额外的意图,如何?查看我们如何启动活动的代码。我们放intent.putExtra()
,所以我们可以将数据转发到每个活动。由于每个活动都有一个数据,即单选按钮 ID,我们可以将此数据转发给设置活动。
override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.actionbar, menu)
return true
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
val id = item.itemId
if (id == R.id.settings) {
val buttonId = intent.extras?.getInt("checkedRadioButtonID") //This is where we get the radio button ID in the different activity
val intent = Intent(this,SettingActivity::class.java)
intent.putExtra("forwardedRadioButtonId", buttonId)
startActivity(intent)
}
return super.onOptionsItemSelected(item)
}
对于设置活动
现在我们得到从 MainActivity -> Activity1/2/3 -> SettingActivity 转发的单选按钮 ID
val buttonId = intent.extras?.getInt("forwardedRadioButtonId")
when (buttonId) {
1 -> rb1.isChecked = true
2 -> rb2.isChecked = true
3 -> rb3.isChcked = true
}
最后,只会选中最初在MainActivity
.
推荐阅读
- php - 如何使用 GET 作为表单的一部分从 Office UI 结构下拉列表中获取选定的值到 php
- javascript - 是否可以制作具有相等分区但每个分区中显示的数据不同的漏斗图(highcharts)?
- python - Django:使用 inlineformset_factory 更新和创建数据记录
- compilation - InvalidOperationException:未找到视图“Components/SomeName/Default”
- flutter - 我在 dio 库中遇到了 Flutter 的问题
- unity3d - 我是否需要在 google playstore 上发布我的应用程序才能集成 Unity Ads?
- reactjs - 枪不会实时更新
- swift - 如何在 Swift 中以与缩放、平移和旋转完全相同的方式将缩放、平移和旋转的图像从一个视图控制器添加到另一个视图控制器?
- python - 无法找到谷歌搜索结果的文本
- css - JavaFX CSS Next-sibling 选择器坏了?