在android搜索到匹配的信息,怎么刷新显示在listivew上
最近在做android的文件管理器,搜索获取到了相关的listivew和imageview信息,怎么样显示在listview中,刷新listview。我的代码是这样的,怎么搜索出来在listivew上什么也没有显示
- Java code
public void showCurrentAllFile(File cur) throws Exception{ File[] searchFile= new File(cur.toString()).listFiles(); filesNameList2 = new ArrayList<FileItem>(); fileItem2 = new FileItem(); for(int i=0; i<searchFile.length; i++){ inputFileName = etSearchFilePath.getText().toString(); //获取要搜索的文件名 /*正则表达式匹配*/ Pattern pattern = Pattern.compile(inputFileName, Pattern.CASE_INSENSITIVE); //不区分大小写 Matcher matcher = pattern.matcher(searchFile[i].getName()); if(matcher.find()){ isexist=true; fileItem2.setName(searchFile[i].getName()); fileItem2.setPath(searchFile[i].getAbsolutePath()); filesNameList2.add(fileItem2); } if(searchFile[i].isDirectory() && searchFile[i].canRead()){ showCurrentAllFile(searchFile[i]); } } if(filesNameList2 != null){ fileAdapter = new FileAdapter(MainFile.this, filesNameList2); lvFileItem.setAdapter(fileAdapter); gridView.setAdapter(fileAdapter); fileAdapter.notifyDataSetChanged(); } }[解决办法]
把filesNameList2 = new ArrayList<FileItem>();
这个改成
ArrayList<FileItem> filesNameList2 = new ArrayList<FileItem>();
再试试
[解决办法]
说下个人的看法,不一定对,你可以试验一下。
fileAdapter = new FileAdapter(MainFile.this, filesNameList2);这行代码,你等于是每次又重新new了一个adapter出来了,而这个adapter已经不是原来和listView绑定的adapter了。
这样做等于是每次重新为listView设置一个adapter,你可以试试调用listView的invalidate方法,让其重绘。还有一种方法,直接更改fileAdapter中的数据源,不需要重新new一个出来。这样的话调用notify方法应该没问题,至少在我这里是可以的。
[解决办法]
直接定义一个list搜索出来的覆盖掉list 在调用adapter.notifyDataSetChanged();
[解决办法]
看Adapter和ListView用法是没问题的。
你确定 filesNameList2 确实是有结果的?
fileAdapter = new FileAdapter(MainFile.this, filesNameList2); 这句里filesNameList2确实
更新了getCount,getView相关的数据?
[解决办法]
你用handler从新填充下不久行了吗 同步刷新 有点不靠谱啊