Android 文件选择器详解及实例代码
程序员文章站
2024-03-04 20:39:48
本文给大家讲解下android文件选择器的使用。实际上就是获取用户在sd卡中选择的文件或文件夹的路径,这很像c#中的ope...
本文给大家讲解下android文件选择器的使用。实际上就是获取用户在sd卡中选择的文件或文件夹的路径,这很像c#中的openfiledialog控件。
此实例的实现过程很简单,这样可以让大家快速的熟悉android文件选择器,提高开发效率。
网上曾经见到过一个关于文件选择器的实例,很多人都看过,本实例是根据它修改而成的,但更容易理解,效率也更高,另外,本实例有自己的特点:
1、监听了用户按下back键的事件,使其返回上一层目录。
2、针对不同的文件类型(文件vs文件夹 , 目标文件vs其他文件)做了特殊处理。
知识点一、 file 类的使用
文件选择器的主要功能是:浏览文件\文件夹、文件类型等;都是通过java file类来实现的。
知识点二、调用方法说明
使用了startactivityforresult()发起调用以及onactivityresult()方法接收回调后的信息。
先贴上效果图如下:
其他的也没什么好说了,大家看看代码注释吧,很简单。
filechooseractivity.java 实现文件选择的类 。
java代码
public class copyoffilechooseractivity extends activity { private string msdcardrootpath ; //sdcard 根路径 private string mlastfilepath ; //当前显示的路径 private arraylist<fileinfo> mfilelists ; private filechooseradapter madatper ; //配置适配器 private void setgridviewadapter(string filepath) { updatefileitems(filepath); madatper = new filechooseradapter(this , mfilelists); mgridview.setadapter(madatper); } //根据路径更新数据,并且通知adatper数据改变 private void updatefileitems(string filepath) { mlastfilepath = filepath ; mtvpath.settext(mlastfilepath); if(mfilelists == null) mfilelists = new arraylist<fileinfo>() ; if(!mfilelists.isempty()) mfilelists.clear() ; file[] files = folderscan(filepath); if(files == null) return ; for (int i = 0; i < files.length; i++) { if(files[i].ishidden()) // 不显示隐藏文件 continue ; string fileabsolutepath = files[i].getabsolutepath() ; string filename = files[i].getname(); boolean isdirectory = false ; if (files[i].isdirectory()){ isdirectory = true ; } fileinfo fileinfo = new fileinfo(fileabsolutepath , filename , isdirectory) ; //添加至列表 mfilelists.add(fileinfo); } //when first enter , the object of madatper don't initialized if(madatper != null) madatper.notifydatasetchanged(); //重新刷新 } //获得当前路径的所有文件 private file[] folderscan(string path) { file file = new file(path); file[] files = file.listfiles(); return files; } private adapterview.onitemclicklistener mitemclicklistener = new onitemclicklistener() { public void onitemclick(adapterview<?> adapterview, view view, int position, long id) { fileinfo fileinfo = (fileinfo)(((filechooseradapter)adapterview.getadapter()).getitem(position)); if(fileinfo.isdirectory()) //点击项为文件夹, 显示该文件夹下所有文件 updatefileitems(fileinfo.getfilepath()) ; else if(fileinfo.ispptfile()){ //是ppt文件 , 则将该路径通知给调用者 intent intent = new intent(); intent.putextra(extra_file_chooser, fileinfo.getfilepath()); setresult(result_ok , intent); finish(); } else { //其他文件..... toast(gettext(r.string.open_file_error_format)); } } }; public boolean onkeydown(int keycode , keyevent event){ if(event.getaction() == keyevent.action_down && event.getkeycode() == keyevent.keycode_back){ backprocess(); return true ; } return super.onkeydown(keycode, event); } //返回上一层目录的操作 public void backprocess(){ //判断当前路径是不是sdcard路径 , 如果不是,则返回到上一层。 if (!mlastfilepath.equals(msdcardrootpath)) { file thisfile = new file(mlastfilepath); string parentfilepath = thisfile.getparent(); updatefileitems(parentfilepath); } else { //是sdcard路径 ,直接结束 setresult(result_canceled); finish(); } } }
此实例的界面稍显简陋,不过大家可以在此基础上完善,添加其他功能。本实例代码下载地址:
http://download.csdn.net/detail/qinjuning/4825392。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
上一篇: Java-输入输出流的简单看法与总结