ListView中EditText循环返回值问题:需从仅返回最后值改为返回全部值
解决ListView中获取所有EditText值的问题
嗨,我来帮你搞定这个问题!你现在遇到的问题很明确:每次循环里你都把string变量覆盖成当前EditText的内容,所以循环结束后自然只保留了最后一个输入框的值。要获取所有EditText的内容,咱们得换个思路——用一个集合来存储每一个值,而不是单个字符串。
修改方案1:返回所有值的列表(推荐)
这种方式最灵活,后续你可以对列表里的每个值做任意处理:
public List<String> getAllQuantities() { // 创建一个列表来存放所有EditText的内容 List<String> allQuantities = new ArrayList<>(); for (int i = 0; i < cart.size(); i++) { View listItem = cartList.getChildAt(i); EditText editText = listItem.findViewById(R.id.editTextQuantity); // 获取文本并去除前后空格,避免空字符串的干扰 String quantity = editText.getText().toString().trim(); allQuantities.add(quantity); } return allQuantities; }
修改方案2:返回拼接后的字符串
如果你需要把所有值拼成一个字符串(比如用逗号分隔),可以在收集完列表后再做拼接:
public String getQuantitiesAsString() { List<String> allQuantities = new ArrayList<>(); for (int i = 0; i < cart.size(); i++) { View listItem = cartList.getChildAt(i); EditText editText = listItem.findViewById(R.id.editTextQuantity); String quantity = editText.getText().toString().trim(); allQuantities.add(quantity); } // 用逗号加空格分隔所有值,你也可以换成其他分隔符 return String.join(", ", allQuantities); }
小提醒
注意一下cart.size()和cartList.getChildCount()是否一致哦!ListView因为有视图复用机制,有时候显示的子项数量可能比数据源cart的大小少(比如列表很长,只有部分项在屏幕内)。如果遇到这种情况,更可靠的方式是在你的Adapter里维护每个EditText的值,比如给EditText设置文本变化监听,实时把值同步到数据源cart对应的对象里,这样直接从数据源取会更准确。
内容的提问来源于stack exchange,提问作者Meenakshi Ruby
相关产品推荐
相关产品推荐

