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
相关产品推荐
相关产品推荐

