如何将多个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
相关产品推荐
相关产品推荐

