在andorid中按字母顺序对文件夹和文件类型排序列表视图

时间:2017-01-06 10:15:44

标签: android sorting listview

按字母顺序对文件夹和文件排序列表视图

我正在尝试以下代码

public class MainActivity extends ActionBarActivity {
    private File file;
    private List<String> myList;
    private ListView listView;
    private TextView pathTextView;
    private String mediapath = new String(Environment.getExternalStorageDirectory().getAbsolutePath());

    private final static String[] acceptedExtensions= {"mp3", "mp2",    "wav", "flac", "ogg", "au" , "snd", "mid", "midi", "kar"
        , "mga", "aif", "aiff", "aifc", "m3u", "oga", "spx"};


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listView=(ListView) findViewById(R.id.pathlist);
        pathTextView=(TextView) findViewById(R.id.path);

        myList = new ArrayList<String>();   

        String root_sd = Environment.getExternalStorageDirectory().toString();
        Log.e("Root",root_sd);

        String state = Environment.getExternalStorageState();
        File list[] = null ;
        /* if ( Environment.MEDIA_MOUNTED.equals(state) || Environment.MEDIA_MOUNTED_READ_ONLY.equals(state) ) {  // we can read the External Storage...
            list=getAllFilesOfDir(Environment.getExternalStorageDirectory());
        }*/

        pathTextView.setText(root_sd);

        file = new File( root_sd ) ;       
        list = file.listFiles(new AudioFilter());
        Log.e("Size of list ","" +list.length);
        //LoadDirectory(root_sd);

        for( int i=0; i< list.length; i++)
        {

            String name=list[i].getName();
        int count =     getAudioFileCount(list[i].getAbsolutePath());
       Log.e("Count : "+count, list[i].getAbsolutePath());
       if(count!=0)
       myList.add(name);
            /*int count=getAllFilesOfDir(list[i]);
            Log.e("Songs count ",""+count);

            */  

        }


        listView.setAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, myList ));

        listView.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int position,
                    long arg3) {
                File temp_file = new File( file, myList.get( position ) );  

                if( !temp_file.isFile())        
                {
                    //LoadDirectory(myList.get( position ));

                    file = new File( file, myList.get( position ));
                    File list[] = file.listFiles(new AudioFilter());

                    myList.clear();

                    for( int i=0; i< list.length; i++)
                    {
                        String name=list[i].getName();

                        int count =     getAudioFileCount(list[i].getAbsolutePath());
                           Log.e("Count : "+count, list[i].getAbsolutePath());
                           if(count!=0)
                          myList.add(name);
                        /*int count=getAllFilesOfDir(list[i]);
                        Log.e("Songs count ",""+count);
                        if(count!=0)
                            myList.add(name);*/
                    }

                    pathTextView.setText( file.toString());
                    //Toast.makeText(getApplicationContext(), file.toString(), Toast.LENGTH_LONG).show(); 
                    listView.setAdapter(new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, myList ));

                }


            }
        });



    }

它为我提供了所有歌曲的文件和文件夹

但是,如果一个文件夹同时包含子文件夹和歌曲,我想先对listview进行排序,先显示所有子文件夹,然后再显示该文件夹中的所有歌曲

如何做到这一点

2 个答案:

答案 0 :(得分:1)

请尝试以下代码进行排序:

Collections.sort(list, new Comparator<String>() {
    @Override
    public int compare(String s1, String s2) {
        return s1.compareToIgnoreCase(s2);
    }
});

答案 1 :(得分:0)

使用此功能

Collections.sort(myList);

setAdapter 之前添加此行。

它将按字母顺序对String Arraylist进行排序。