android简单文件浏览器

时间:2014-07-05 19:14:37

标签: android android-listview

我正在尝试在我的应用中实现简单文件浏览器选择文件夹。我几乎已经完成了但是出了点问题。我有一个列表使用单选模式查看以列出文件。 没有显示错误但是当我滚动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;
}

我花了几个小时才知道原因,但失败了。请分享一些建议。

2 个答案:

答案 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。