从数据库表向ArrayList添加字符串出现拼接问题,需实现下拉菜单单独显示
问题原因与修复方案
你的代码里,下拉菜单所有字符串拼接显示的核心问题是循环中错误地将整个dropDownTitle列表转为字符串添加到data中,而不是逐个添加列表里的单个元素。
错误代码段分析
这段循环里,String.valueOf(dropDownTitle)会把整个ArrayList转换成类似[元素1, 元素2, 元素3]的字符串,导致所有内容变成一个下拉选项:
for (int y = 0; y < dropDownTitle.size();) { data.add(String.valueOf(dropDownTitle)); y++; }
修复后的代码
@Query("SELECT name FROM tbl_data WHERE label LIKE :query ") List<String> getSelectedName(int query); ArrayList<String> dropDownTitle; try { data = new ArrayList<>(); // 避免强制类型转换,直接用ArrayList构造方法包装返回的List dropDownTitle = new ArrayList<>(dataDao.getSelectedName(Integer.parseInt(titleLabel))); tvDisc.setText(titleText); // 遍历每个元素,逐个添加到data中 for (String item : dropDownTitle) { data.add(item); } // 或者更简洁:直接把dropDownTitle的内容赋值给data,无需循环 // data.addAll(dropDownTitle); } catch (Exception e) { Log.e(TAG, "onViewCreated: " + e); }
额外优化建议
- 不需要单独创建
dropDownTitle再循环添加,直接用data.addAll(dataDao.getSelectedName(...))一步完成,减少冗余代码 - 避免强制类型转换
(ArrayList<String>),因为DAO返回的List不一定是ArrayList类型,用new ArrayList<>(...)包装更安全
内容的提问来源于stack exchange,提问作者Daniel Mohajer
相关产品推荐
相关产品推荐

