0

有人可以指出这里出了什么问题:

下面的代码循环遍历 /sdcard 上的目录。如果它找到一个文件,它会将名称等添加到一个数组中。如果它找到一个目录,它就会进入并扫描它。

system.out 返回 /sdcard 上的所有文件。

数组适配器仅列出它在顶级目录中找到的内容

在我的 sd 卡上,我希望它返回两个 mp3 文件,一个在顶级目录中,一个埋在树中。system.out 行找到了两者。

我怀疑 fls arraylist 正在被破坏。如果是,我该如何保存这个?

提前致谢!

 public void fill(File f) {     
        File[]files = f.listFiles();
          List<Option>fls = new ArrayList<Option>();
          if (files != null) {
                for(File ff: files){
                    if(!ff.isDirectory())
                        {
                        /** Only Add MP3's to the list    */
                        String filename=ff.getName();
                        String ext = filename.substring(
                                    filename.lastIndexOf('.')+1, filename.length());
                                           if(ext.equals("MP3")||ext.equals("mp3")||ext.equals("Mp3")||ext.equals("mP3"))
                        fls.add(new Option(ff.getName(),"File Size: "+ff.length()/1048576 + "MB",ff.getAbsolutePath()));
                        System.out.println( ff.getName() );
                        }
                    else
                        fill(ff);
               }    
          }

        Collections.sort(fls);
        adapter = new FileArrayAdapter(getActivity(),R.layout.folder_view,fls);
        this.setListAdapter(adapter);   
        }
4

1 回答 1

1

使用代码,每次进入新文件夹时都会重新创建arraylist,您需要将适配器代码从函数中取出,并让fill函数将arraylist作为参数,以便每次调用都采用相同的arraylist。

IE。

List<Option>fls = new ArrayList<Option>();

fill(f,fls);

Collections.sort(fls);
adapter = new FileArrayAdapter(getActivity(),R.layout.folder_view,fls);
this.setListAdapter(adapter); 

如果你想把它减少到一个电话(我不推荐),你可以做

fill(f,null);

并在填充函数中检查 arraylist 是否为空,如果它正在初始化它,但您仍然必须将它传递给其他调用。

于 2012-06-12T21:32:27.707 回答