0

誰かがここで何がうまくいかないのか指摘してもらえますか:

以下のコードは、/sdcard のディレクトリをループします。ファイルが見つかった場合は、名前などを配列に追加します。ディレクトリが見つかった場合は、立ち寄ってスキャンします。

system.out は、/sdcard 上のすべてのファイルを返します。

アレイ アダプタは、最上位ディレクトリで見つかったものだけを一覧表示します

私のSDカードでは、2つのmp3ファイルが返されることを期待しています。1つは最上位ディレクトリにあり、もう1つはツリー内に埋もれています。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

コードをそのまま使用すると、新しいフォルダーに入るたびに配列リストが再作成されます。関数からアダプターコードを取り出し、fill 関数で配列リストをパラメーターとして取得して、各呼び出しが同じ配列リストを取得するようにする必要があります。

すなわち。

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

fill(f,fls);

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

1回の呼び出しに抑えたい場合(これはお勧めしません)、行うことができます

fill(f,null);

また、fill 関数で arraylist が null かどうかを確認し、初期化されている場合はそれを追加の呼び出しに渡す必要があります。

于 2012-06-12T21:32:27.707 に答える