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

Android开发:如何通过Intent在Activity间传递ArrayList<ArrayList<String>>

这个问题很常见,其实Android的Intent已经支持传递这种嵌套列表啦,只是你没用到正确的方法而已。我给你一步步拆解怎么做:

解决步骤

1. 在发送数据的Activity(Activity1)中传递嵌套列表

因为ArrayList实现了Serializable接口,而嵌套的ArrayList<String>里的String也是可序列化的,所以直接用Intent.putExtra()的序列化重载方法就能传递:

// 假设你已经初始化好了这两个嵌套列表
ArrayList<ArrayList<String>> questions = new ArrayList<>();
ArrayList<ArrayList<String>> answers = new ArrayList<>();

// 创建跳转到ReviewActivity(你的Activity2)的Intent
Intent intent = new Intent(Activity1.this, ReviewActivity.class);
// 用自定义的key传递数据,注意两个页面的key要保持一致
intent.putExtra("EXTRA_QUESTIONS", questions);
intent.putExtra("EXTRA_ANSWERS", answers);

// 启动目标Activity
startActivity(intent);

2. 在接收数据的Activity(ReviewActivity)中获取嵌套列表

你找不到对应的getExtra()方法是因为没有专门针对ArrayList<ArrayList<String>>的直接方法,但我们可以通过getSerializableExtra()获取,然后强制类型转换:

public class ReviewActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_review);

        // 获取传递过来的Intent
        Intent receivedIntent = getIntent();
        if (receivedIntent != null) {
            // 强制类型转换获取嵌套列表
            ArrayList<ArrayList<String>> receivedQuestions = 
                (ArrayList<ArrayList<String>>) receivedIntent.getSerializableExtra("EXTRA_QUESTIONS");
            ArrayList<ArrayList<String>> receivedAnswers = 
                (ArrayList<ArrayList<String>>) receivedIntent.getSerializableExtra("EXTRA_ANSWERS");
            
            // 现在你就可以在ReviewActivity里使用这两个列表啦
            // 比如遍历展示问题和对应的选中答案
            if (receivedQuestions != null && receivedAnswers != null && receivedQuestions.size() == receivedAnswers.size()) {
                for (int i = 0; i < receivedQuestions.size(); i++) {
                    String question = receivedQuestions.get(i).get(0); // 假设每个子列表第一个元素是问题文本
                    ArrayList<String> selectedAnswers = receivedAnswers.get(i);
                    // 这里添加你的业务处理逻辑
                }
            }
        }
    }
}

补充说明

  • 为什么可以这么做?因为ArrayList本身实现了Serializable接口,而嵌套的ArrayList<String>中的String也是Serializable类型,所以整个嵌套结构可以被序列化传递。
  • 如果你的数据量特别大,序列化可能会有性能问题,这时可以考虑用Parcelable(需要自己实现嵌套列表的Parcelable逻辑),但对于字符串列表这种场景,Serializable已经完全够用,代码也更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:26:34