Android 选择文件

如果需要让用户选择文件,可以使用如下方法将SD卡上的文件显示到一个ListActivity供用户选择。

 

1 定义个一个方法,可以得到一个路径下所有的文件和文件夹,并对其排序,使文件在文件夹后面,并将结果传到一个ListView的Adapter构造方法中:

public void getFiles(String path){
		tv.setText(path);
		File f=new File(path);
		//得到所有子文件和文件夹
		File[] tem=f.listFiles();
		//如果当前的目录不是在顶层目录,就把父目录要到files数组中的第一个
		if(!path.equals(root)){
			files=new File[tem.length+1];
			System.arraycopy(tem, 0, files, 1, tem.length);
			files[0]=f.getParentFile();
		}else{
			files=tem;
		}
		sortFilesByDirectory(files);
		//为ListActivity设置Adapter
		setListAdapter(new Adapter(this, files,files.length==tem.length));
	}

其中排序方法的代码如下:

	
	//对文件进行排序
	private void sortFilesByDirectory(File[] files) {
		Arrays.sort(files, new Comparator<File>() {
			public int compare(File f1, File f2) {
				return Long.valueOf(f1.length()).compareTo(f2.length());
			}
		});
	}

2 定义一个ListView的Adapter继承BaseAdapter,构造方法接受三个参数:Context(上下文), File[](要显示的文件),boolean(是否为顶层目录):

public Adapter(Context context,File[] files, boolean istop) {
		this.context=context;
		this.files = files;
		this.istop = istop;
	}

Adapter中getView的方法如下:

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Holder holder=null;
        if(convertView==null){
            holder=new Holder();
            convertView=View.inflate(context, R.layout.adapter, null);
            holder.iv=(ImageView) convertView.findViewById(R.id.adapter_icon);
            holder.tv=(TextView) convertView.findViewById(R.id.adapter_txt);
            convertView.setTag(holder);
        }else{
            holder=(Holder) convertView.getTag();
        }
        //设置convertView中控件的值
        setconvertViewRow( position, holder);
        return convertView;
    }

其中Holder类定义:

	class Holder{
		private ImageView iv;
		private TextView tv;
	}

setconvertViewRow方法定义如下:

private void setconvertViewRow(int position,Holder holder ){
		File f=files[position];
		holder.tv.setText(f.getName());
		if(!istop && position==0){//不是在顶层目录
			//加载后退图标
			holder.iv.setImageResource(R.drawable.back);
		}else if(f.isFile()){//是文件
			//加载文件图标
			holder.iv.setImageResource(R.drawable.file);
		}else{//文件夹
			//加载文件夹图标
			holder.iv.setImageResource(R.drawable.dir);
		}
	}

3  在程序开始的时候就可以调用getFiles方法,传入参数“/sdcard”就可以拉,结果如下:




下载代码


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值