Как отображать файлы на SD-карте в ListView?

Я хотел бы создать кнопку, которая при нажатии будет переходить к классу, который отображает все медиафайлы с SD-карты с помощью файла ListView.

После выбора из списка он вернет выбранное имя файла в основной класс. ЕСЛИ возвращенный файл является файлом изображения, он будет отображаться в виде ImageView, а если возвращенный файл является аудиофайлом, он будет отображать только значок.


person Jethro    schedule 27.04.2011    source источник
comment
Что вы сделали до сих пор? Stack Overflow не является сайтом у меня есть проблема с кодом. Вы показываете нам, что вы сделали, и мы говорим вам, что не так.   -  person Octavian A. Damiean    schedule 27.04.2011
comment
Пожалуйста, проверьте этот ответ как ссылку stackoverflow.com/questions/11285288/   -  person Ashish Saini    schedule 12.02.2015


Ответы (5)


Добавьте метод GetFiles() в свою программу. Вызовите его, чтобы получить ArrayList<> всех файлов. Затем вы можете использовать его для заполнения вашего listview. Вам необходимо предоставить строковый аргумент DirectoryPath.

Функция:

public ArrayList<String> GetFiles(String DirectoryPath) {
    ArrayList<String> MyFiles = new ArrayList<String>();
    File f = new File(DirectoryPath);

    f.mkdirs();
    File[] files = f.listFiles();
    if (files.length == 0)
        return null;
    else {
        for (int i=0; i<files.length; i++) 
            MyFiles.add(files[i].getName());
    }

    return MyFiles;
}

Пример использования:

@Override
public void onCreate() {
// Other Code

    ListView lv;
    ArrayList<String> FilesInFolder = GetFiles("/sdcard/somefolder");
    lv = (ListView)findViewById(R.id.filelist);

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

    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            // Clicking on items
         }
    });
}

Убедитесь, что внешнее хранилище доступно для чтения: http://developer.android.com/guide/topics/data/data-storage.html#filesExternal

Чтобы отфильтровать файлы по имени/расширению: Как получить доступ к SD-карте и вернуться к массиву с файлами определенного формата?

person Sheharyar    schedule 25.08.2012
comment
Что означает android.R.layout.simple_list_item_1? - person Si8; 04.08.2013
comment
Это всего лишь пример, но если вам интересно, я использовал подмакет simple_list_item_1 для каждого элемента списка в моем listview списке файлов. - person Sheharyar; 04.08.2013
comment
Можете ли вы дать некоторое предложение по этому вопросу: stackoverflow.com/questions/18045035/ - person Si8; 04.08.2013

Во-первых, я настоятельно рекомендую вам сначала прочитать несколько руководств по Android, чтобы вы получили основы. Вы должны реализовать следующее, чтобы сделать это

  1. Список всех медиафайлов — Как вывести список всех медиафайлов в Android?
  2. Начать новую активность
  3. Android: захват возврата активности
person Mojo Risin    schedule 27.04.2011
comment
Я ценю твой ответ, чувак. Я уже изучил некоторые основы, но мне трудно работать с файлами (отображать) и отображать их в ListView. - person Jethro; 27.04.2011
comment
В порядке :). Итак, чтобы решить эту проблему, прочитайте 1. Вы должны использовать MediaStore для запроса всех файлов, которые он вернет Cursor. Вы должны обернуть курсор в SimpleCursorAdapter и установить этот адаптер в ListView. - person Mojo Risin; 27.04.2011

File mfile=new File("/sdcard");
File[] list=mfile.listFiles();

System.out.println("list"+mfile.listFiles().length);
for(int i=0;i<mfile.listFiles().length;i++)
{
    if(list[i].isHidden())
    }
        System.out.println("hidden path files.."+list[i].getAbsolutePath());
    }
}

может это поможет!!!

person Community    schedule 27.04.2011
comment
но я пытаюсь отобразить его в ListView? это возможно с вашим кодом? - person Jethro; 27.04.2011
comment
да, но ты должен создать свою логику - person ; 27.04.2011

Обновленная функция :: используйте это для нового API

вызвать функцию следующим образом:

 searchForFileInExternalStorage("filename.ext");  

@выполнение

 public File searchForFileInExternalStorage(String filename) {
            File storage = Environment.getExternalStorageDirectory();

            return searchForFileInFolder(filename, storage);
        }

        public File searchForFileInFolder(String filename, File folder) {
            File[] children = folder.listFiles();
            File result;

            for (File child : children) {
                if (child.isDirectory()) {
                    result = searchForFileInFolder(filename, child);
                    if (result != null) {
                        return result;
                    }
                } else {
                    // replace equals by equalsIgnoreCase if you want to ignore the
                    // case of the file name
                    if (child.getName().equals(filename)) {
                        return child;
                    }
                }
            }

            return null;
        }
person star18bit    schedule 19.03.2013

это правильное решение для вас! или я дам вам ссылку для эта штука!

public class SongsManager {
// SDCard Path
//choose your path for me i choose sdcard
final String MEDIA_PATH = new String("/sdcard/");
private ArrayList<hashmap<string, string="">> songsList = new ArrayList<hashmap<string, string="">>();

// Constructor
public SongsManager(){

}

/**
 * Function to read all mp3 files from sdcard
 * and store the details in ArrayList
 * */
public ArrayList<hashmap<string, string="">> getPlayList(){
    File home = new File(MEDIA_PATH);

    if (home.listFiles(new FileExtensionFilter()).length > 0) {
        for (File file : home.listFiles(new FileExtensionFilter())) {
            HashMap<string, string=""> song = new HashMap<string, string="">();
            song.put("songTitle", file.getName().substring(0, (file.getName().length() - 4)));
            song.put("songPath", file.getPath());

            // Adding each song to SongList
            songsList.add(song);
        }
    }
    // return songs list array
    return songsList;
}

/**
 * Class to filter files which are having .mp3 extension
 * */
//you can choose the filter for me i put .mp3
class FileExtensionFilter implements FilenameFilter {
    public boolean accept(File dir, String name) {
        return (name.endsWith(".mp3") || name.endsWith(".MP3"));
    }
}
 }
person ddd    schedule 01.08.2015