Android文件选择器的实例分享
本文给大家讲解下Android文件选择器的使用。实际上就是获取用户在SD卡中选择的文件或文件夹的路径,这很像C#中的OpenFileDialog控件。
此实例的实现过程很简单,这样可以让大家快速的熟悉Android文件选择器,提高开发效率。
网上曾经见到过一个关于文件选择器的实例,很多人都看过,本实例是根据它修改而成的,但更容易理解,效率也更高,另外,本实例有自己的特点:
1、监听了用户按下Back键的事件,使其返回上一层目录。
2、针对不同的文件类型(文件vs文件夹 , 目标文件vs其他文件)做了特殊处理。
知识点一、 File 类的使用
文件选择器的主要功能是:浏览文件\文件夹、文件类型等;都是通过Java File类来实现的。
知识点二、调用方法说明
使用了startActivityForResult()发起调用以及onActivityResult()方法接收回调后的信息。
先贴上效果图如下:

其他的也没什么好说了,大家看看代码注释吧,很简单。
FileChooserActivity.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。
Android文件选择器的实例分享的更多相关文章
- android文件选择器、仿淘宝编辑页面、新手引导层等源码
Android精选源码 单片机和安卓应用,传感器 文件选择器 android滑动选择的尺子view源码 android视频录制 视频压缩的源码 仿今日头条顶部导航指示器源码 Android框架+常用控 ...
- PHP文件锁定写入实例分享
PHP文件锁定写入实例解析. 原文地址:http://www.jbxue.com/article/23118.html PHP文件写入方法,以应对多线程写入,具体代码: function file_w ...
- Android手机间使用socket进行文件互传实例
这是一个Android手机间文件传输的例子,两个手机同时装上此app,然后输入接收端的ip,选择文件,可以多选,点确定,就发送到另一个手机,一个简单快捷文件快传实例.可以直接运用到项目中. 下面是文件 ...
- 也发一个自己实现的android简单文件选择器代码。支持多卡,排序
一个很简单的文件选择器对话框,支持双sd卡,当然前提是要有sd卡..并且实现了排序效果. 只有100多行的代码,基本的思路就是用listview显示目录下的所有子文件,再判断是文件还是目录. 利用Co ...
- Android第三方文件选择器:aFileChooser
Android第三方文件选择器:aFileChooser aFileChooser是Android平台上的一个第三方文件选择器,其在github上的项目主页是:https://github.co ...
- Android经典项目开发之天气APP实例分享
原文:Android经典项目开发之天气APP实例分享 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/mzc186/article/details/5 ...
- Android FileUtil(android文件工具类)
android开发和Java开发差不了多少,也会有许多相同的功能.像本文提到的文件存储,在Java项目和android项目里面用到都是相同的.只是android开发的一些路径做了相应的处理. 下面就是 ...
- Android 应用程序之间内容分享详解(一)
一个Andoird应用程序的重要的地方是他们有相互沟通和整合的能力,一个应用程序可以和另一个应用程序交互,接下来我们来看看Android应用之间的内容分享 当你构建Intent的时候,必须要指定Int ...
- Android 应用程序之间内容分享详解(二)
转载请注明出处:http://blog.csdn.net/xiaanming/article/details/9428613 Android 应用程序之间内容分享详解(一) 之前给大家分享了你开发的应 ...
随机推荐
- HDU 5437 Alisha’s Party
题意:有k个人带着价值vi的礼物来,开m次门,每次在有t个人来的时候开门放进来p个人,所有人都来了之后再开一次门把剩下的人都放进来,每次带礼物价值高的人先进,价值相同先来先进,q次询问,询问第n个进来 ...
- [转] 使用C#开发ActiveX控件
双魂人生 原文 使用C#开发ActiveX控件 ActiveX 是一个开放的集成平台,为开发人员.用户和 Web生产商提供了一个快速而简便的在 Internet 和 Intranet 创建程序集成和内 ...
- HDU 5768 Lucky7 容斥原理+中国剩余定理(互质)
分析: 因为满足任意一组pi和ai,即可使一个“幸运数”被“污染”,我们可以想到通过容斥来处理这个问题.当我们选定了一系列pi和ai后,题意转化为求[x,y]中被7整除余0,且被这一系列pi除余ai的 ...
- bzoj3884: 上帝与集合的正确用法 欧拉降幂公式
欧拉降幂公式:http://blog.csdn.net/acdreamers/article/details/8236942 糖教题解处:http://blog.csdn.net/skywalkert ...
- CSS hack大全
1.什么是CSS hack? CSS hack是通过在CSS样式中加入一些特殊的符号,让不同的浏览器识别不同的符号(什么样的浏览器识别什么样的符号是有标准的,CSS hack就是让你记住这个标准),以 ...
- SVM:从理论到OpenCV实践
(转载请注明出处:http://blog.csdn.net/zhazhiqiang/ 未经允许请勿用于商业用途) 一.理论 参考网友的博客: (1)[理论]支持向量机1: Maximum Marg ...
- javascript跑马灯抽奖
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- JAVA与多线程开发(线程基础、继承Thread类来定义自己的线程、实现Runnable接口来解决单继承局限性、控制多线程程并发)
实现线程并发有两种方式:1)继承Thread类:2)实现Runnable接口. 线程基础 1)程序.进程.线程:并行.并发. 2)线程生命周期:创建状态(new一个线程对象).就绪状态(调用该对象的s ...
- BootStrap入门教程 (二) :BASE CSS(排版(Typography),表格(Table),表单(Forms),按钮(Buttons))
上讲回顾:Bootstrap的手脚架(Scaffolding)提供了固定(fixed)和流式(fluid)两种布局,它同时建立了一个宽达940px和12列的格网系统. 基于手脚架(Scaffoldin ...
- Sqoop 命令
1)list-databases List available databases on a server sqoop list-databases --connect jdbc:db2:// ...