You need to enable JavaScript to run this app. Android Intent跨Activity传值:如何传递选中影片与观影日期
优惠活动
大模型
产品
解决方案
定价
更多

Android Intent跨Activity传值:如何传递选中影片与观影日期

仅传选中数据的跨Activity实现步骤

发送端(影片/日期选择页)Intent封装调整

之前的逻辑错误点是把全量影片列表塞进了Intent,调整为仅提取选中的单条数据传入即可:

  • 从Spinner的选中回调中,通过选中位置直接获取对应的单部Movies对象,不要传入整个影片列表:Movies pickedMovie = fullMovieList.get(spinner.getSelectedItemPosition());
  • 从DatePicker中提取用户选定的日期,统一格式化为易解析的字符串(比如yyyy-MM-dd格式),作为独立Extra传入。
  • 示例传值代码:
Intent jumpIntent = new Intent(CurrentSelectActivity.this, Main_Activity3.class);
// 传入已实现Parcelable的选中影片对象
jumpIntent.putExtra("EXTRA_PICKED_MOVIE", pickedMovie);
// 传入选定的观影日期
jumpIntent.putExtra("EXTRA_PICKED_DATE", formattedSelectedDate);
startActivity(jumpIntent);

注意:因为Movies类已经实现Parcelable接口,不需要额外转成JSON字符串、也不需要传整个列表,直接通过putExtra传入单对象是性能最优的实现方式。

接收端(Main_Activity3)数据解析逻辑

之前完全没有写接收逻辑,补充如下代码即可完成数据提取与页面展示:

  • 在Activity的onCreate生命周期中,直接获取系统传入的启动Intent,不要自行new Intent实例。
  • 按照发送端约定的key值,分别提取影片对象和日期字符串,绑定到对应页面控件展示。
  • 示例接收代码:
// Main_Activity3 的 onCreate 方法内
Intent fromSelectPage = getIntent();
// 提取Parcelable类型的选中影片
Movies pickedMovie = fromSelectPage.getParcelableExtra("EXTRA_PICKED_MOVIE");
// 提取选中的观影日期
String pickedDate = fromSelectPage.getStringExtra("EXTRA_PICKED_DATE");
// 给页面控件赋值
tvMovieTitle.setText(pickedMovie.getMovieName());
tvAppointDate.setText(pickedDate);

常见踩坑提醒

  • 传值和取值的key字符串必须完全一致,建议把key定义为跨页面共享的静态常量,避免手滑修改字符串导致取值空指针。
  • 如果提取影片对象时出现类型转换异常,检查Movies类的Parcelable实现是否完整:必须重写writeToParcel方法、配套实现带CREATOR的静态常量,否则跨Activity传值会直接报错。
  • 不要传全量列表:一方面会占用不必要的Intent内存配额(Android对Intent可携带数据有1MB左右的上限,列表过大容易触发TransactionTooLargeException),另一方面也不符合“仅展示用户选中内容”的业务需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 18:27:06