Add a separate method to your activity that does the following:
private ArrayList<SongDetails> getSongsFromDirectory(File f){
ArrayList<SongDetails> songs = new ArrayList<SongDetails>();
if (!f.exists() || !f.isDirectory()) return songs;
File[] files = f.listFiles(new Mp3Filter());
for (File file : files){
if (file.isDirectory()){
songs.addAll(getSongsFromDirectory(file));
}
else{
SongDetails detail=new SongDetails();
detail.setIcon(R.drawable.ic_launcher);
String fileName = file.getName();
detail.setSong(fileName);
detail.setArtist(fileName);
detail.setAlbum(fileName);
songs.add(detail);
}
}
return songs;
}
Also change your filter to a FileFilter and also return folders
class Mp3Filter implements FileFilter{
public boolean accept(File file){
return (file.isDirectory() || file.getName().toUpperCase().endsWith(".MP3"))
}
}
Finally, change your code in onCreateView to this:
View view = inflater.inflate(R.layout.fragment_a, container, false);
ListView SngList = (ListView) view.findViewById(R.id.SongList);
File f=new File("/sdcard/");
ArrayList<SongDetails> Songinfo = getSongsFromDirectory(f);
if (songinfo.size()>0){
SngList.setAdapter(new CustomAdapter(Songinfo));
return view;
}
else return null;
Please note that I did not test this code, but it should at least give you an idea of how to accomplish it.