如何在多个活动之间共享变量?(科特林)

How can I share a variable across multiple activities? (Kotlin)

提问人:JenairoB 提问时间:3/16/2023 最后编辑:JenairoB 更新时间:3/16/2023 访问量:193

问:

我正在尝试在多个活动中共享一个变量,到目前为止,我所能找到的就是如何将其从一个活动移动到下一个活动(通过单击一个按钮,您可以转到下一个活动,变量就会被转移)。但是当尝试将此过程进一步重复到一个屏幕时,我不断打印出默认值 0。为什么会这样?

下面的代码显示了三个活动中第一个活动内的相应代码。因此,当我单击按钮转到下一个活动时,所有这些变量都会转移到下一个活动。但是当我在下一个活动中重复此代码时,它不起作用。

   val welcomeButton = findViewById<Button>(R.id.welcomeButton)
            welcomeButton.setOnClickListener {
                val userHeight = findViewById<EditText>(R.id.et_UserHeight).text.toString().toInt()
                val userWeight = findViewById<EditText>(R.id.et_UserWeight).text.toString().toInt()
                val userAge = findViewById<EditText>(R.id.et_UserAge).text.toString().toInt()
                val userGender = findViewById<Spinner>(R.id.genderSpinner).toString()
                val userActivityLevel = findViewById<Spinner>(R.id.activityLevelSpinner).toString()
                val userWeightGoal = findViewById<Spinner>(R.id.weightGoalSpinner).toString()
                val intent = Intent(this, WelcomeActivity::class.java)
                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)
            }

下面的代码是我尝试将变量发送到第三个活动的第二个活动。但是我无法在第三个活动上使用变量。有什么想法吗?

    val userAge = intent.getIntExtra("EXTRA_AGE", 0)
            val userHeight = intent.getIntExtra("EXTRA_HEIGHT", 0)
            val userWeight = intent.getIntExtra("EXTRA_WEIGHT", 0)
            val userGender = intent.getStringExtra("EXTRA_GENDER")
            val userActivityLevel = intent.getStringExtra("EXTRA_ACTIVITYLEVEL")
            var userWeightGoal = intent.getStringExtra("EXTRA_WEIGHTGOAL")


            val welcomeToHomeButton = findViewById<Button>(R.id.SendToHomeButton)
            welcomeToHomeButton.setOnClickListener {
                intent.putExtra("EXTRA_AGE", userAge)
                intent.putExtra("EXTRA_HEIGHT", userHeight)
                intent.putExtra("EXTRA_WEIGHT", userWeight)
                val intent = Intent(this, HomeActivity::class.java)
                startActivity(intent)
            }
Android Kotlin 变量 android-activity 数据共享

评论


答:

0赞 mol 3/16/2023 #1

每个 Activity 都有一个 getIntent 方法(在 kotlin 中翻译为),该方法返回启动该 Activity 的 intent。intent

在下面的代码中,您首先将额外内容设置为第二个 Activity 的 intent,然后创建一个启动第三个 Activity 的新 intent:

welcomeToHomeButton.setOnClickListener {
   intent.putExtra("EXTRA_AGE", userAge)
   intent.putExtra("EXTRA_HEIGHT", userHeight)
   intent.putExtra("EXTRA_WEIGHT", userWeight)
   val intent = Intent(this, HomeActivity::class.java)
   startActivity(intent)
}

您需要先创建一个新的 Intent,然后为其设置附加功能,如下所示:

welcomeToHomeButton.setOnClickListener {
   val intent = Intent(this, HomeActivity::class.java)
   intent.putExtra("EXTRA_AGE", userAge)
   intent.putExtra("EXTRA_HEIGHT", userHeight)
   intent.putExtra("EXTRA_WEIGHT", userWeight)
   startActivity(intent)
}