我想创建一个按钮,点击后会转到一个类,使用ListView
显示SD卡中的所有媒体文件。如何在ListView中的SD卡上显示文件?
从列表中选择后,它将返回选择的主文件名。如果返回的文件是图像文件,它将显示在ImageView
中,并且如果返回的文件是音频文件,则它只会显示一个图标。
我想创建一个按钮,点击后会转到一个类,使用ListView
显示SD卡中的所有媒体文件。如何在ListView中的SD卡上显示文件?
从列表中选择后,它将返回选择的主文件名。如果返回的文件是图像文件,它将显示在ImageView
中,并且如果返回的文件是音频文件,则它只会显示一个图标。
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());
}
}
这可能会有所帮助!
首先我强烈建议你先阅读一些有关android的教程,以便了解基础知识。你必须实现以下要做到这一点
我感谢你的回应男人。我已经学会了一些基础知识,但我很难处理文件(displayin)并将其显示在ListView上。 – Jethro 2011-04-27 08:08:33
好的:)。所以要解决这个问题1.你必须使用MediaStore来查询它将返回Cursor的所有文件。您必须将光标封装在SimpleCursorAdapter中,并将此适配器设置为ListView。 – 2011-04-27 08:12:04
添加方法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
要根据名称/延伸过滤器文件:How to acces sdcard and return and array with files off a specific format?
'android.R.layout.simple_list_item_1'指的是什么? – Si8 2013-08-04 04:05:22
这仅仅是一个例子,但如果你很好奇,我在'listview'' filelist“ – Sheharyar 2013-08-04 16:06:09
中为每个列表项目使用了一个子布局'simple_list_item_1'你能提供一些关于这个问题的建议:http:// stackoverflow。 COM /问题/ 18045035 /使用-customadapter到变化如何,列表视图,则显示的 – Si8 2013-08-04 16:28:29
更新功能::用这个新的API
通话功能是这样的:
searchForFileInExternalStorage("filename.ext");
@implementation
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;
}
public class FileActivity extends ListActivity {
String str;
ArrayList<String> al;
ArrayAdapter<String> adapter;
ListView lv;
@SuppressLint("SdCardPath")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.file_view);
Intent int1=getIntent();
ArrayList<String> arr1=GetFiles(Environment.getExternalStorageDirectory().getPath());
adapter= new ArrayAdapter<String>(getApplicationContext(),
android.R.layout.simple_expandable_list_item_1,arr1);
lv = (ListView) findViewById(android.R.id.list);
lv.setAdapter(adapter);
}
private ArrayList<String> GetFiles(String path) {
ArrayList<String> arr2=new ArrayList<String>();
File file=new File(path);
File[] allfiles=file.listFiles();
if(allfiles.length==0) {
return null;
}
else {
for(int i=0;i<allfiles.length;i++) {
arr2.add(allfiles[i].getName());
}
}
return arr2;
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
// TODO Auto-generated method stub
super.onListItemClick(l, v, position, id);
}
这是您的正确解决方案!或者我给你一个link这个东西!
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"));
}
}
}
到目前为止你做了什么?堆栈溢出不是一个我有问题的提供代码站点。你告诉我们你做了什么,我们告诉你什么是错的。 – 2011-04-27 08:10:13
请检查这个答案作为参考 http://stackoverflow.com/questions/11285288/android-mediastore-get-distinct-folders-of-music-files/28473755#28473755 – 2015-02-12 10:13:38