我正在尝试在我的应用中实现简单文件浏览器到选择文件夹。我几乎已经完成了但是出了点问题。我有一个列表使用单选模式查看以列出文件。 没有显示错误但是当我滚动listView时,相同的文件夹最多被列出4次并且位置也在变化。即使我非常熟悉ListView,我也不知道出了什么问题。 这是我活动的一部分 -
setContentView(R.layout.selectfolder);
lv=(ListView) findViewById(R.id.folderlistView);
select=(Button) findViewById(R.id.fSelect);
cancel=(Button) findViewById(R.id.fCancel);
path=Environment.getExternalStorageDirectory().getPath();
item=new ArrayList<String>();
itemPath=new ArrayList<String>();
loadDirectory(path);}
private void loadDirectory(String path) {
item.clear();
itemPath.clear();
FileFilter filterDirectoriesOnly=new FileFilter() {
@Override
public boolean accept(File arg0) {
// TODO Auto-generated method stub
return arg0.isDirectory();
}
};
File file=Environment.getExternalStorageDirectory();
File[] files=file.listFiles(filterDirectoriesOnly);
System.out.println("file size is"+files.length);
for (int i=0;i<files.length;i++) {
File f=files[i];
item.add(f.getName());
itemPath.add(f.getPath().split("emulated")[1]);
}
System.out.println("item size is"+item.size());
aa=new FolderArrayAdapter(FolderSelect.this, android.R.layout.simple_list_item_1,item);
lv.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
lv.setAdapter(aa);
和我的自定义数组适配器 -
ArrayList<String> item;
public FolderArrayAdapter(Context context, int resource,ArrayList<String> objects) {
super(context, resource, objects);
this.item=objects;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v=convertView;
LayoutInflater li=(LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if(v==null){
v=li.inflate(R.layout.folderlisttext, parent, false);
TextView t=(TextView) v.findViewById(R.id.foldertext);
t.setText(item.get(position));}
return v;
}
我花了几个小时才知道原因,但失败了。请分享一些建议。
答案 0 :(得分:0)
替换
aa=new FolderArrayAdapter(FolderSelect.this, android.R.layout.simple_list_item_1,itemPath);
到
aa=new FolderArrayAdapter(FolderSelect.this, android.R.layout.simple_list_item_1,item);
答案 1 :(得分:0)
t.setText(item.get(position));
你应该永远这样做。不仅当v == null。