Android 目录选择获取文件路径

首先显示回掉方法

public interface CallbackBundle {
    abstract void callback(Bundle bundle);
}

其次用到的文件类

package com.jsit.ac;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;


import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.example.useryundemo.R;


public class OpenFileDialog  {

    public static String tag = "OpenFileDialog";
    static final public String sRoot = "/";
    static final public String sParent = "..";
    static final public String sFolder = ".";
    static final public String sEmpty = "";
    static final private String sOnErrorMsg = "No rights to access!";

    public static Dialog createDialog(int id, Context context, String title, CallbackBundle callback, String suffix, Map<String, Integer> images){
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setView(new FileSelectView(context, id, callback, suffix, images));
        Dialog dialog = builder.create();
        dialog.setTitle(title);
        return dialog;
    }

    static class FileSelectView extends ListView implements AdapterView.OnItemClickListener{


        private CallbackBundle callback = null;
        private String path = sRoot;
        private List<Map<String, Object>> list = null;
        private int dialogid = 0;

        private String suffix = null;

        private Map<String, Integer> imagemap = null;

        public FileSelectView(Context context, int dialogid, CallbackBundle callback, String suffix, Map<String, Integer> images) {
            super(context);
            this.imagemap = images;
            this.suffix = suffix==null?"":suffix.toLowerCase();
            this.callback = callback;
            this.dialogid = dialogid;
            this.setOnItemClickListener(this);
            refreshFileList();
        }

        private String getSuffix(String filename){
            int dix = filename.lastIndexOf('.');
            if(dix<0){
                return "";
            }
            else{
                return filename.substring(dix+1);
            }
        }

        private int getImageId(String s){
            if(imagemap == null){
                return 0;
            }
            else if(imagemap.containsKey(s)){
                return imagemap.get(s);
            }
            else if(imagemap.containsKey(sEmpty)){
                return imagemap.get(sEmpty);
            }
            else {
                return 0;
            }
        }

        private int refreshFileList()
        {
            File[] files = null;
            try{
                files = new File(path).listFiles();
            }
            catch(Exception e){
                files = null;
            }
            if(files==null){
                Toast.makeText(getContext(), sOnErrorMsg, Toast.LENGTH_SHORT).show();
                return -1;
            }
            if(list != null){
                list.clear();
            }
            else{

                list = new ArrayList<Map<String, Object>>(files.length);
            }

            ArrayList<Map<String, Object>> lfolders = new ArrayList<Map<String, Object>>();
            ArrayList<Map<String, Object>> lfiles = new ArrayList<Map<String, Object>>();

            if(!this.path.equals(sRoot)){
                Map<String, Object> map = new HashMap<String, Object>();
                map.put("name", sRoot);
                map.put("path", sRoot);
                map.put("img", getImageId(sRoot));
                list.add(map);

                map = new HashMap<String, Object>();
                map.put("name", sParent);
                map.put("path", path);
                map.put("img", getImageId(sParent));
                list.add(map);
            }

            for(File file: files)
            {
                if(file.isDirectory() && file.listFiles()!=null){
                    Map<String, Object> map = new HashMap<String, Object>();
                    map.put("name", file.getName());
                    map.put("path", file.getPath());
                    map.put("img", getImageId(sFolder));
                    lfolders.add(map);
                }
                else if(file.isFile()){
                    String sf = getSuffix(file.getName()).toLowerCase();
                    if(suffix == null || suffix.length()==0 || (sf.length()>0 && suffix.indexOf("."+sf+";")>=0)){
                        Map<String, Object> map = new HashMap<String, Object>();
                        map.put("name", file.getName());
                        map.put("path", file.getPath());
                        map.put("img", getImageId(sf));
                        lfiles.add(map);
                    }
                }
            }

            list.addAll(lfolders);
            list.addAll(lfiles);


            SimpleAdapter adapter = new SimpleAdapter(getContext(), list, R.layout.filedialogitem, new String[]{"img", "name", "path"}, new int[]{R.id.filedialogitem_img, R.id.filedialogitem_name, R.id.filedialogitem_path});
            this.setAdapter(adapter);
            return files.length;
        }
        @Override
        public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            String pt = (String) list.get(position).get("path");
            String fn = (String) list.get(position).get("name");
            if(fn.equals(sRoot) || fn.equals(sParent)){
                File fl = new File(pt);
                String ppt = fl.getParent();
                if(ppt != null){
                    path = ppt;
                }
                else{
                    path = sRoot;
                }
            }
            else{
                File fl = new File(pt);
                if(fl.isFile()){
                    Log.i("zy", "---------> "+pt);
                    ((Activity)getContext()).dismissDialog(this.dialogid);
                    Bundle bundle = new Bundle();
                    bundle.putString("path", pt);
                    bundle.putString("name", fn);
                    this.callback.callback(bundle);
                    return;
                }
                else if(fl.isDirectory()){
                    path = pt;
                }
            }
            this.refreshFileList();
        }
    }


}

重复Activity的oncreateDialog类

@Override
    protected Dialog onCreateDialog(int id) {
        // TODO Auto-generated method stub
        Map<String, Integer> images = new HashMap<String, Integer>();
        images.put(OpenFileDialog.sRoot, R.drawable.ic_launcher); // 根目录图标
        images.put(OpenFileDialog.sParent, R.drawable.ic_launcher); // 返回上一层的图标
        images.put(OpenFileDialog.sFolder, R.drawable.ic_launcher); // 文件夹图标
        images.put("jpg", R.drawable.ic_launcher); // jpg文件图标
        images.put(OpenFileDialog.sEmpty, R.drawable.ic_launcher);
        Dialog dialog = OpenFileDialog.createDialog(1, this, "OpenFile",
                new CallbackBundle() {
                    @Override
                    public void callback(Bundle bundle) {
                        String filepath = bundle.getString("path");
                        Log.i("zy", "---------->  " + filepath);
                    }
                }, ".jpg;", images);
        return dialog;
    }

最后调用activity自带的显示方法,1为dialog的id

 showDialog(1);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值