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
相关产品推荐
相关产品推荐

