You need to enable JavaScript to run this app. Android接收用户数据后修改启动Activity:后续直进DailyActivity如何实现
优惠活动
大模型
产品
解决方案
定价
更多

Android接收用户数据后修改启动Activity:后续直进DailyActivity如何实现

实现方案

总共分4步完成,全程使用Android原生API即可实现,无需引入第三方依赖:

步骤1:添加轻量持久化存储,保存状态和计算结果

用系统自带的SharedPreferences存储两类数据:首次采集完成标记、BMI和BMR数值,你可以直接在需要存数据的地方调用,也可以封装成工具方法:

// 存数据的工具方法,可直接写到Activity中
private fun saveUserData(bmi: Float, bmr: Float) {
    getSharedPreferences("app_config", MODE_PRIVATE).edit()
        .putBoolean("is_first_launch_completed", true)
        .putFloat("saved_bmi", bmi)
        .putFloat("saved_bmr", bmr)
        .apply()
}

步骤2:新增无UI启动路由页(可选但推荐,避免跳转闪烁)

把这个SplashActivity设为应用的启动入口,在AndroidManifest.xml里把它的intent-filter设为LAUNCHER category,原有MainActivity和DailyActivity去掉LAUNCHER配置即可:

class SplashActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val sp = getSharedPreferences("app_config", MODE_PRIVATE)
        val isCompleted = sp.getBoolean("is_first_launch_completed", false)
        
        val targetIntent = if (isCompleted) {
            Intent(this, DailyActivity::class.java)
        } else {
            Intent(this, MainActivity::class.java)
        }
        // 清栈跳转,避免返回回到Splash页
        targetIntent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
        startActivity(targetIntent)
        finish()
    }
}

如果你不想新增启动页,也可以直接把DailyActivity设为启动页,在它的onCreate最前面做上述判断,未完成采集直接跳MainActivity即可。

步骤3:修改原有MainActivity的完成按钮逻辑

你原来的点击事件需要补充存数据、清栈跳转的逻辑,修改后代码如下:

binding.doneButton.setOnClickListener {
    checkValid()
    if (valid){
        val bmi = calculateBmi().round(1)
        val bmr = calculateBmr().round(2)
        // 先存数据到本地
        saveUserData(bmi, bmr)
        // 跳转后清掉当前MainActivity,避免返回回到采集页
        Intent(this, DailyActivity::class.java).also{
            it.putExtra("EXTRA_BMI", bmi)
            it.putExtra("EXTRA_BMR", bmr)
            it.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
            startActivity(it)
            finish()
        }
    }
}

步骤4:DailyActivity加载本地数据

后续启动DailyActivity时直接从SharedPreferences读数据即可,无需依赖Intent传参:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    // 先尝试从Intent取首次跳转传的参数,取不到就读本地存储
    val bmi = intent.getFloatExtra("EXTRA_BMI", 0f).takeIf { it != 0f } 
        ?: getSharedPreferences("app_config", MODE_PRIVATE).getFloat("saved_bmi", 0f)
    val bmr = intent.getFloatExtra("EXTRA_BMR", 0f).takeIf { it != 0f } 
        ?: getSharedPreferences("app_config", MODE_PRIVATE).getFloat("saved_bmr", 0f)
    
    // 后续正常使用bmi、bmr数值即可
}

补充说明

如果后续需要给用户提供重置数据的功能,只要把is_first_launch_completed标记设为false,同时清空存储的BMI、BMR数值,下次启动就会自动回到采集页。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 06:36:04