Android文件管理器开发中ListView显示文件名重复BUG如何解决?
问题修复说明
可以修复,你遇到的重复显示问题由代码逻辑错误导致,具体修复方案如下:
问题根因
ListView适配器设置逻辑放在了for循环内部,每遍历一个文件就新建一次适配器并绑定当前未完全填充的listmap,和ListView的条目复用机制共同作用导致出现重复显示的异常。- 代码中冗余声明了
position变量,和循环变量rep作用完全重复,属于无效代码。
修正后代码
public void loadFiles(String path){ listmap.clear(); array.clear(); FileUtil.listDir(path, array); String currentlyPath = path; text_currently_path.setText(currentlyPath); // 仅遍历填充数据,不操作适配器 for(int rep = 0; rep < array.size(); rep++){ HashMap<String, Object> item = new HashMap<>(); item.put("path", array.get(rep)); listmap.add(item); } // 数据填充完成后统一处理适配器逻辑 if(listview_files.getAdapter() == null){ // 首次加载时初始化适配器 listview_files.setAdapter(new ListViewAdapter(listmap)); } else { // 非首次加载直接刷新数据即可 ((ListViewAdapter) listview_files.getAdapter()).notifyDataSetChanged(); } }
额外排查建议
如果修改后仍然存在重复问题,可依次排查两点:
FileUtil.listDir()方法是否存在逻辑漏洞,会往传入的array中插入重复路径loadFiles()方法是否被重复回调触发,导致同一份数据被多次添加到列表中
内容的提问来源于stack exchange,提问作者Dev
相关产品推荐
相关产品推荐

