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

Android如何通过Intent在两个Activity间传递ArrayList集合

Activity间传递ArrayList<User>集合实现方案

跨Activity传递自定义类型集合的核心是让集合内的元素类支持序列化,Android中可选两种序列化方案,按需选择即可:

  • 推荐方案:自定义类实现Parcelable接口,性能更高、内存占用更低,是Android官方推荐的跨组件传值方案,可通过Android Studio插件自动生成接口实现代码,无需手动编写
  • 简易方案:自定义类实现java.io.Serializable接口,无需编写额外实现代码,仅需声明接口即可,性能略低于Parcelable,小数据量场景下使用无感知

当前(发起跳转的)Activity代码

你已定义好目标集合:

public ArrayList<User> users = new ArrayList<User>();

跳转时根据你选择的序列化方案,将集合存入Intent即可:

// 构造跳转Intent,将CurrentActivity、TargetActivity替换为你项目中对应的Activity类名
Intent intent = new Intent(CurrentActivity.this, TargetActivity.class);

// 👉 如果User实现的是Serializable接口,用这行传值
intent.putExtra("user_list", users);

// 👉 如果User实现的是Parcelable接口(推荐),注释掉上面那行,用这行传值
// intent.putParcelableArrayListExtra("user_list", users);

// 发起跳转
startActivity(intent);

注意:两边传值取值的key必须完全一致,示例中统一用user_list作为key,可自行修改但必须保证两端相同。


目标(接收数据的)Activity代码

在目标Activity的onCreate生命周期方法中,取出传递过来的集合即可直接复用:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_target);

    // 👉 如果User实现的是Serializable接口,用这行取值
    ArrayList<User> receivedUsers = (ArrayList<User>) getIntent().getSerializableExtra("user_list");

    // 👉 如果User实现的是Parcelable接口(推荐),注释掉上面那行,用这行取值
    // ArrayList<User> receivedUsers = getIntent().getParcelableArrayListExtra("user_list");

    // 建议先做非空判断再使用集合,避免空指针
    if (receivedUsers != null) {
        // 这里就可以正常操作receivedUsers集合,和原页面的集合数据完全一致
    }
}

注意事项

  • Intent跨组件传递数据有大小限制(通常为1MB左右),不要用该方式传递数据量过大的集合,否则会出现TransactionTooLargeException崩溃,大数据量场景推荐使用ViewModel、全局单例、本地存储等方案共享数据
  • 若使用Parcelable方案,不要混淆User类的代码,否则会出现取值失败问题
  • 集合内的所有嵌套自定义属性类,也需要和User类一样实现对应的序列化接口,否则会出现序列化失败异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 10:15:37