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

Android开发:从MainActivity传ArrayList到ReceiverActivity仅获最后值求助

解决ArrayList传递仅获取最后一个值的问题

看起来你遇到的问题是在传递ArrayList时只拿到最后一个元素,大概率是在填充列表或者传递数据的环节出了问题。我帮你分析下常见原因,并给出修正后的代码:

常见问题排查

  • 列表未初始化:如果你的name列表只是声明了但没实例化(比如没写name = new ArrayList<>();),每次添加元素时可能都在创建新的列表或者覆盖之前的内容。
  • 重复创建列表:如果在点击按钮的回调里每次都重新初始化name,那之前添加的元素都会被清空,最后只剩刚添加的那个。
  • Intent传递方式错误:传递ArrayList时需要确保用正确的方法,并且列表里的元素类型是可序列化的(String是没问题的)。

修正后的MainActivity代码

public class MainActivity extends AppCompatActivity {
    EditText txt;
    Button check, save;
    List<String> name; // 声明列表

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        // 初始化控件
        txt = findViewById(R.id.txt);
        check = findViewById(R.id.check);
        save = findViewById(R.id.save);
        
        // 关键:初始化ArrayList,放在onCreate里,只初始化一次
        name = new ArrayList<>();

        // 保存按钮点击事件:添加内容到列表
        save.setOnClickListener(v -> {
            String inputText = txt.getText().toString().trim();
            if (!inputText.isEmpty()) {
                name.add(inputText); // 添加输入的内容到列表
                txt.setText(""); // 清空输入框,方便下次输入
            }
        });

        // 跳转按钮点击事件:传递列表到ReceiverActivity
        check.setOnClickListener(v -> {
            Intent intent = new Intent(MainActivity.this, ReceiverActivity.class);
            // 传递ArrayList,注意用putStringArrayListExtra或者putExtra(因为String实现了Serializable)
            intent.putStringArrayListExtra("NAME_LIST", new ArrayList<>(name));
            startActivity(intent);
        });
    }
}

修正后的ReceiverActivity代码

public class ReceiverActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_receiver);
        
        // 获取传递过来的ArrayList
        Intent intent = getIntent();
        if (intent != null) {
            List<String> receivedList = intent.getStringArrayListExtra("NAME_LIST");
            // 这里可以处理拿到的列表,比如打印或者显示
            if (receivedList != null) {
                for (String item : receivedList) {
                    Log.d("ReceiverActivity", "Item: " + item);
                }
            }
        }
    }
}

关键注意点

  • 列表初始化时机:一定要在onCreate里初始化一次name列表,而不是在点击按钮的回调里重复初始化,否则每次添加都会清空之前的内容。
  • 传递列表的方法:用putStringArrayListExtra是最直接的,因为String是可序列化的;如果是自定义对象,需要让对象实现Serializable或者Parcelable接口。
  • 空值判断:获取输入内容时记得trim并判断是否为空,避免添加空字符串到列表里。

这样修改后,你就能完整传递整个ArrayList到ReceiverActivity,而不是只拿到最后一个元素啦~

内容的提问来源于stack exchange,提问作者D.P.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:58:45