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

如何将多个Activity中的数据传递到同一个支付Activity

Android多赛事详情页传数据到支付页实现方案

核心实现逻辑

Android官方提供的Intent携带数据的方式就能满足需求,具体步骤如下:

步骤1:封装赛事数据类(可选但推荐)

优先使用Android原生推荐的Parcelable序列化方式封装赛事通用字段,后续不管加多少个赛事详情页都可以复用这个结构,示例代码(Kotlin):

@Parcelize
data class GameEvent(
    val eventId: String,
    val eventName: String,
    val ticketPrice: Long,
    val eventStartTime: Long,
    val eventLocation: String
) : Parcelable

Java代码同理实现Parcelable接口即可。

步骤2:赛事详情页(Activity1~4)按钮点击跳转逻辑

每个详情页的支付按钮点击事件中,将当前页面对应的赛事数据塞入Intent后跳转支付页即可,示例代码:

// 支付按钮点击监听
payBtn.setOnClickListener {
    // 取当前页面对应的赛事数据,每个页面替换为自己的数据源即可
    val currentEvent = getCurPageGameEvent()
    // 跳转支付页
    val intent = Intent(this, PayActivity::class.java)
    intent.putExtra("KEY_GAME_EVENT", currentEvent)
    startActivity(intent)
}

步骤3:支付页(Activity5)接收数据逻辑

在支付页的onCreate生命周期中取出传递的赛事数据,做后续支付逻辑即可:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_pay)
    
    // 接收数据
    val event = intent.getParcelableExtra<GameEvent>("KEY_GAME_EVENT")
    if (event == null) {
        Toast.makeText(this, "赛事数据异常", Toast.LENGTH_SHORT).show()
        finish()
        return
    }
    // 后续业务逻辑:展示赛事信息、调用支付接口等
    tvEventName.text = event.eventName
    tvPrice.text = "票价:¥${event.ticketPrice/100}.${event.ticketPrice%100}"
}

补充说明

  • 如果传递的字段非常少,也可以不封装对象,单独传递基础类型参数,比如intent.putExtra("KEY_EVENT_NAME", "xx赛事")即可
  • 传递数据的key(上面示例的KEY_GAME_EVENT)建议统一存到常量类中,避免不同页面写不一致导致拿不到数据
  • Intent携带数据的大小限制通常为1MB,仅传递赛事基础字段完全足够,不要用该方式传递大图、大文件等数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:27:02