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

Kotlin多Activity间共享变量异常:传递至第三Activity获默认值0求解

问题原因分析

1. 局部变量覆盖导致传值丢失

在第二个Activity的按钮点击事件里,你犯了一个变量覆盖的错误:

  • 你先给当前的intent(也就是从第一个Activity传递过来的Intent对象)添加了Extra参数
  • 但紧接着你重新创建了一个新的Intent对象,并且用同名的局部变量intent覆盖了原来的对象
  • 新创建的这个Intent没有携带任何你添加的参数,所以第三个Activity调用getIntExtra时只能拿到默认值0

错误代码片段:

welcomeToHomeButton.setOnClickListener {
    // 操作的是从第一个Activity过来的旧Intent
    intent.putExtra("EXTRA_AGE", userAge)
    intent.putExtra("EXTRA_HEIGHT", userHeight)
    intent.putExtra("EXTRA_WEIGHT", userWeight)
    // 新创建的Intent覆盖了旧变量,之前的Extra参数白加了
    val intent = Intent(this, HomeActivity::class.java)
    startActivity(intent)
}

2. 额外问题:Spinner取值错误

第一个Activity里获取Spinner选中值的方式不对,findViewById<Spinner>(R.id.genderSpinner).toString()拿到的是Spinner控件的对象描述字符串,不是用户选中的选项文本。正确的取值方式应该是:

val userGender = (findViewById<Spinner>(R.id.genderSpinner).selectedItem as String)

其他Spinner的取值也需要改成这种写法,否则传递的不是用户选择的内容。

正确的传值写法

第二个Activity的按钮点击事件应该修改为:

welcomeToHomeButton.setOnClickListener {
    // 直接创建跳转到HomeActivity的新Intent
    val intent = Intent(this, HomeActivity::class.java)
    // 将所有参数添加到这个新Intent中
    intent.putExtra("EXTRA_AGE", userAge)
    intent.putExtra("EXTRA_HEIGHT", userHeight)
    intent.putExtra("EXTRA_WEIGHT", userWeight)
    intent.putExtra("EXTRA_GENDER", userGender)
    intent.putExtra("EXTRA_ACTIVITYLEVEL", userActivityLevel)
    intent.putExtra("EXTRA_WEIGHTGOAL", userWeightGoal)
    startActivity(intent)
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 11:33:11