Android 弹窗显示一个选择文件访问路径

     之前集成别人的一个项目,发现了一个挺好用的查找文件的功能,

路径我这边选择的内部存储:

Environment.getExternalStorageDirectory().getAbsolutePath();

我们看效果图:

  

       一个很简单的选择弹窗,我们看一下代码:

           放在openFileDialog方法中,在需要的地方调用即可。

    // Upload
    private GridView mGridView;
    private View fileChooserView;
    private TextView mTvPath;
    private String mSdcardRootPath;
    private String mLastFilePath;
    private List<UploadFileChooserAdapter.FileInfo> mUploadFileList;
    private UploadFileChooserAdapter mUploadAdapter;
    private Dialog uploadDialog;

      路径 :

  mSdcardRootPath = Environment.getExternalStorageDirectory().getAbsolutePath();
 //文件选择器相关功能实现
    private void openFileDialog() {
        initDialog();
        uploadDialog = new AlertDialog.Builder(this).create();
        Window window = uploadDialog.getWindow();
        WindowManager.LayoutParams lp = window.getAttributes();
        window.setAttributes(lp);
        uploadDialog.show();
        uploadDialog.getWindow().setContentView(fileChooserView,
                new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, 640));
    }
    private void initDialog() {
        fileChooserView = getLayoutInflater().inflate(
                R.layout.filechooser_show, null);
        fileChooserView.findViewById(R.id.imgBackFolder).setOnClickListener(
                mClickListener);
        mTvPath = (TextView) fileChooserView.findViewById(R.id.tvPath);
        mGridView = (GridView) fileChooserView.findViewById(R.id.gvFileChooser);
        mGridView.setEmptyView(fileChooserView.findViewById(R.id.tvEmptyHint));
        mGridView.setOnItemClickListener(mItemClickListener);
        setGridViewAdapter(mSdcardRootPath);
    }
    private View.OnClickListener mClickListener = new View.OnClickListener() {
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.imgBackFolder:
                    backProcess();
                    break;
            }
        }
    };
    private AdapterView.OnItemClickListener mItemClickListener = new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> adapterView, View view,
                                int position, long id) {
            UploadFileChooserAdapter.FileInfo fileInfo = (UploadFileChooserAdapter.FileInfo) (((UploadFileChooserAdapter) adapterView
                    .getAdapter()).getItem(position));
            if (fileInfo.isDirectory()) {
                updateFileItems(fileInfo.getFilePath());
            } else {

            }
        }
    };
    private void setGridViewAdapter(String filePath) {
        updateFileItems(filePath);
        mUploadAdapter = new UploadFileChooserAdapter(this, mUploadFileList);
        mGridView.setAdapter(mUploadAdapter);
    }

    private void updateFileItems(String filePath) {
        mLastFilePath = filePath;
        mTvPath.setText(mLastFilePath);

        if (mUploadFileList == null)
            mUploadFileList = new ArrayList<>();
        if (!mUploadFileList.isEmpty())
            mUploadFileList.clear();

        File[] files = folderScan(filePath);

        for (int i = 0; i < files.length; i++) {
            if (files[i].isHidden()) // Ignore the hidden file
                continue;

            String fileAbsolutePath = files[i].getAbsolutePath();
            String fileName = files[i].getName();
            boolean isDirectory = false;
            if (files[i].isDirectory()) {
                isDirectory = true;
            }
            UploadFileChooserAdapter.FileInfo fileInfo = new UploadFileChooserAdapter.FileInfo(fileAbsolutePath, fileName,
                    isDirectory);

            mUploadFileList.add(fileInfo);
        }
        // When first enter , the object of mAdatper don't initialized
        if (mUploadAdapter != null)
            mUploadAdapter.notifyDataSetChanged();
    }

    private File[] folderScan(String path) {
        File file = new File(path);
        File[] files = file.listFiles();
        return files;
    }
    public void backProcess() {
        if (!mLastFilePath.equals(mSdcardRootPath)) {
            File thisFile = new File(mLastFilePath);
            String parentFilePath = thisFile.getParent();
            updateFileItems(parentFilePath);
        } else {
            setResult(RESULT_CANCELED);
            uploadDialog.dismiss();
        }
    }

 如果还需要实现其他更多的功能,可以根据自己实际情况,再添加也是不错的。如果上面有遇到问题,可以评论留言一起交流学习。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值