Search code examples
androidlistviewarraylistcustom-adapter

populate custom listview from audio files inside a folder


I'm trying to get files from a folder and populate recyclerview based on the name of files using a custom adapter.

This is how I'm doing it:

In onBindViewHolder:

    Product m = dataList.get(position);
    //title
    holder.title.setText(m.getTitle());

And :

void popList() {
    Product product = new Product();
    File dir = new File(mainFolder);//path of files
    File[] filelist = dir.listFiles();
    String[] nameOfFiles = new String[filelist.length];
    for (int i = 0; i < nameOfFiles.length; i++) {
        nameOfFiles[i] = filelist[i].getName();
        product.setTitle(nameOfFiles[i]);
    }
    songList.add(product);
}

But the problem is, it just adds the first item. I can't figure it out where should I loop to add it all.


Solution

  • You need to create separate product objects for items in loop and add it to list instead of creating a single Product object in list which will hold the last set data

    void popList() {
        Product product ;
        File dir = new File(mainFolder);//path of files
        File[] filelist = dir.listFiles();
        String[] nameOfFiles = new String[filelist.length];
        for (int i = 0; i < nameOfFiles.length; i++) {
            // create product
            product = new Product();
            nameOfFiles[i] = filelist[i].getName();
            product.setTitle(nameOfFiles[i]);
            // add it to list
            songList.add(product);
        }
    }
    

    Your code walk through

    void popList() {
        Product product = new Product(); // one object
        // ..code
        for (int i = 0; i < nameOfFiles.length; i++) {
            nameOfFiles[i] = filelist[i].getName();
            product.setTitle(nameOfFiles[i]); // at the end of loop set last file name to object
        }
        songList.add(product); // one object in the list , end of story 
    }