Majid
Majid

Reputation: 201

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.

Upvotes: 1

Views: 176

Answers (1)

Pavneet_Singh
Pavneet_Singh

Reputation: 37404

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 
}

Upvotes: 3

Related Questions