2011-04-27 38 views
7

我想创建一个按钮,点击后会转到一个类,使用ListView显示SD卡中的所有媒体文件。如何在ListView中的SD卡上显示文件?

从列表中选择后,它将返回选择的主文件名。如果返回的文件是图像文件,它将显示在ImageView中,并且如果返回的文件是音频文件,则它只会显示一个图标。

+9

到目前为止你做了什么?堆栈溢出不是一个我有问题的提供代码站点。你告诉我们你做了什么,我们告诉你什么是错的。 – 2011-04-27 08:10:13

+0

请检查这个答案作为参考 http://stackoverflow.com/questions/11285288/android-mediastore-get-distinct-folders-of-music-files/28473755#28473755 – 2015-02-12 10:13:38

回答

1
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()); 
    } 
} 

这可能会有所帮助!

+0

非常感谢。我会尝试这一个。 :) – Jethro 2011-04-27 08:02:24

+0

但即时通讯尝试显示它在一个ListView?你的代码有可能吗? – Jethro 2011-04-27 08:04:49

+2

雅,但你必须创建你的逻辑 – 2011-04-27 08:35:41

2

首先我强烈建议你先阅读一些有关android的教程,以便了解基础知识。你必须实现以下要做到这一点

  1. 列表中的所有媒体文件 - How to list all media in Android?
  2. Start new Activity
  3. Android: Capturing the return of an activity
+0

我感谢你的回应男人。我已经学会了一些基础知识,但我很难处理文件(displayin)并将其显示在ListView上。 – Jethro 2011-04-27 08:08:33

+0

好的:)。所以要解决这个问题1.你必须使用MediaStore来查询它将返回Cursor的所有文件。您必须将光标封装在SimpleCursorAdapter中,并将此适配器设置为ListView。 – 2011-04-27 08:12:04

8

添加方法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?

+0

'android.R.layout.simple_list_item_1'指的是什么? – Si8 2013-08-04 04:05:22

+1

这仅仅是一个例子,但如果你很好奇,我在'listview'' filelist“ – Sheharyar 2013-08-04 16:06:09

+0

中为每个列表项目使用了一个子布局'simple_list_item_1'你能提供一些关于这个问题的建议:http:// stackoverflow。 COM /问题/ 18045035 /使用-customadapter到变化如何,列表视图,则显示的 – Si8 2013-08-04 16:28:29

0

更新功能::用这个新的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; 
     } 
1
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); 
    } 
0

这是您的正确解决方案!或者我给你一个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")); 
    } 
} 
} 
相关问题