First check wether your ArrayList i.e., fileLists does not contains any duplicate values ,by the following
public ArrayList<String> getFromSdcard(String folderName) {
ArrayList<String> audioFileLists = new ArrayList<String>();
File file = new File(Environment.getExternalStorageDirectory()+"/"+folderName);
if (file.isDirectory()) {
File[] listFile = file.listFiles();// get list of files
for (int i = 0; i < listFile.length; i++) {
String path = listFile[i].getAbsolutePath();
audioFileLists.add(path);// add path of files to array list
}
}
Log.d("audioFileLists:" + audioFileLists.size(), ""); // Check the Size of the List
return audioFileLists;
}
and print the Values in audioFileLists to ensure that your arraylist does not contain duplicate values
public void print(ArrayList<String> audioFileLists) {
for (int i = 0; i < audioFileLists.size(); i++) {
System.out.println("files:" + audioFileLists.get(i));
}
}
if the ArrayList contain duplicate please use the following method to remove from duplicates from the ArrayList, we can remove the duplicates of ArrayList using Hashset as i shown below.
public ArrayList<String> removeDuplicates(ArrayList<String> audioFileLists){
HashSet<String> listToSet = new HashSet<String>(
audioFileLists);
audioFileLists.clear();
audioFileLists.addAll(listToSet);
return audioFilesLists;
}
and now again you can call print method which we wrote above to ensure the duplicates are removed.if the ArrayList does not have duplicate then the problem is with usage of Adpater.
As well knew, the adapter’s job is to prepare the views to be shown in the ListView for each element in the dataset. This tends to involve many findViewById(int) lookups which are quite costly in CPU time and also i believe that here's the duplication occurs.
The standing Best Practices for Android dictate that adapters use something called the ViewHolder Pattern to mitigate the cost of these lookups and also to eliminate the duplication issue.
I have explained here, how to use View Holder pattern.
public class MusicAdapter extends BaseAdpater{
private ArrayList<String> audioFile;
LayoutInflater mInflater =null;
public MusicAdapter( ArrayList<String> audioFiles,Context dcontextObject) {
audioFile = audioFiles;
mInflater = LayoutInflater.from(dcontextObject);
}
public int getCount() {
return audioFile.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
// Create an Object for View Holder
ViewHolder holder;
if(convertView == null){
convertView = mInflater.inflate(R.layout.musiclist, null);
holder.albumName = (TextView) convertView.findViewById(R.id.albumName);
}
else{
holder = (ViewHolder) convertView .getTag();
}
holder.albumName.setText(fileName.substring(audioFile.get(position).lastIndexOf("/")+1));
return convertView;
}// End of getView()
// create View Holder class here
class ViewHolder {
TextView albumName;
}
}// End of Adapter