美文网首页Android开发经验谈Android知识
安卓文件夹路径选择功能实现

安卓文件夹路径选择功能实现

作者: 极客简讯 | 来源:发表于2017-11-29 10:53 被阅读136次

开发环境:Android Studio
库文件下载:compile 'li.filechoose:FileDirChoose:1.0.3'(可以看一下Android Studio3.0 关键字 compile 和 implementation 的区别,有坑)
github地址:https://github.com/zw21544182/RecordDemo(filechoose)
关键知识:RecyclerView.Adapter的使用
最终效果:

效果.gif

界面代码比较简单,就不贴了
先来看看初始化权限

 private void initData() {
        if (Build.VERSION.SDK_INT >= 23) {//判断系统版本是否大于6.0
            if (checkSelfPermission(NEED_PERMISSION) == PackageManager.PERMISSION_GRANTED) {
                //检查是否有读写权限
                loadDataFrompATH(mPath);//从路径中加载数据 
            } else {
                requestPermissions(new String[]{NEED_PERMISSION}, REQUESCODE);//申请权限
            }
            return;
        }
        loadDataFrompATH(mPath);//系统版本小于6.0直接加载数据
    }

接下来是加载数据方法

private void loadDataFrompATH(final String mPath) {
        data.clear();//data为RecyclerView中要显示的数据
        new Thread() {
            public void run() {
                super.run();
                File file = new File(mPath);
                File[] listFiles = file.listFiles();//获取子文件
                for (File f : listFiles
                        ) {
                    if (!f.isDirectory() || f.getName().startsWith(".")) {//如果不是路径或者以 . 开头的文件夹 则直接跳过
                        continue;
                    }
                    data.add(f.getAbsolutePath());//往集合中添加符合条件的数据
                }
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        fileAdapter.setData(data);//将数据载入适配器当中
                    }
                });
            }
        }.start();

    }

重点来了

适配器FileAdapter的onBindViewHolder方法

    @Override
    public void onBindViewHolder(final ViewHolder holder, final int position) {
        final String path = data.get(position);
        boolean isChecked = false;//初始化一个boolean值 来判断是否被选中
        for (String s : selectData
                ) {//遍历选中的集合
            if (s.trim().equals(path)) {//如果集合中的子元素与适配其中的路径相同
                isChecked = true;//判断已被选中
                break;//终止循环
            }
        }
        holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {//设置checkBox的点击事件
                if (b) {//选中状态
                    if (selectData.contains(path))//如果集合中包含了该元素则直接返回
                        return;
                    else//否则添加
                        selectData.add(path);
                } else {//未选中状态
                    if (selectData.contains(path))//如果集合中包含了该元素则移除
                        selectData.remove(path);
                    else//否则 返回
                        return;
                }
            }
        });
        holder.checkBox.setChecked(isChecked);
        holder.tvFileDir.setText(path.substring(path.lastIndexOf("/") + 1));
        holder.rootLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (!holder.checkBox.isChecked()) //获取checkBox的选中状态来判断是否能进入下一个文件夹
                {
                    event.enterNextDir(data.get(position));//接口,用于在activity中回调
                } else {
                    Toast.makeText(context, context.getString(R.string.filechoose_already), Toast.LENGTH_SHORT).show();
                }
            }
        });
    }

最后看看ativity中的回调方法

  fileAdapter.setEvent(new FileAdapter.Event() {
            @Override
            public void enterNextDir(String path) {
                editText.setText("");
                mPath = path;//将子路径赋值给当前路径
                loadDataFrompATH(mPath);//加载数据
            }
        });

相关文章

  • 安卓文件夹路径选择功能实现

    开发环境:Android Studio库文件下载:compile 'li.filechoose:FileDirCh...

  • Mac OS开发-- AMPathPopUpButton的简单使

    在Mac OS开发中,我们可以使用AMPathPopUpButton控件来实现用户选择文件夹路径的功能,非常方便实...

  • 安卓获取文件夹路径

    目的:获取sd卡根目录下的文件夹 推荐一篇关于安卓路径的文章彻底搞懂Android文件存储---内部存储,外部存储...

  • 简单实现安卓app自动更新功能

    简单实现安卓自动更新 一般的安卓app都有自动更新功能,实现app的更新,以让用户体验新版本的功能,这里也是项目中...

  • 2019-01-15

    Appium不兼容安卓7.0 解决步骤: 1、在appium安装路径下找到appium-adb这个文件夹,打开文件...

  • 安卓黑板功能实现

    前两年的疫情爆发让线上教育特别火,很多公司选择线上办公,很多学校线上教学,不过后来受政策影响很大。这些机构学校依赖...

  • 移植wifidog至android5.1平台

    实现的功能 先使用nanohttpd在安卓内实现http server的功能,然后在已经移植并开启wifidog的...

  • 无标题文章

    手Q安卓APP下载链接优化——中间页面实现方案 背景回顾 由于当前的手Q内部流量安卓APP下载路径为应用宝外部下载...

  • 玩抖音?先看看这8点基本知识,你掌握多少了?

    下载应用: 安卓,苹果系统都可以,但是注意两者使用功能,有差异。 安卓可以选择本地音乐,苹果不支持。(左安卓,右苹...

  • 安卓优化系列之安卓应用的启动

    前言 目前的安卓应用基本上都趋于成熟了,所以目前对安卓开发的要求不再是实现功能了,而是要能够优化应用。然而安卓应用...

网友评论

    本文标题:安卓文件夹路径选择功能实现

    本文链接:https://www.haomeiwen.com/subject/cequbxtx.html