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

