Skip to content

2. 过滤器:只显示某种类型的文件

rosuH edited this page Jun 28, 2020 · 5 revisions

1. 先上代码

如果你想实现只显示图片视频音频之类的文件的话,只需要很简单的一部:实现过滤器。

一个过滤器

// in kotlin
val aFilter = object : AbstractFileFilter() {
    override fun doFilter(listData: ArrayList<FileItemBeanImpl>): ArrayList<FileItemBeanImpl> {
        return ArrayList(listData.filter { item ->
        // 文件夹或是图片,则被滤出来,然后新建一个 ArrayList 返回给调用者即可
        ((item.isDir) || (item.fileType is RasterImageFileType))
    })
}}
// in Java
AbstractFileFilter aFilter = new AbstractFileFilter() {
    @NotNull
    @Override
    public ArrayList<FileItemBeanImpl> doFilter(@NotNull final ArrayList<FileItemBeanImpl> arrayList) {
        ArrayList<FileItemBeanImpl> fileItemBeans = new ArrayList<>();
        for (FileItemBeanImpl fileItemBean : arrayList){
            if (fileItemBean.isChecked() || fileItemBean.getFileType() instanceof RasterImageFileType){
                fileItemBeans.add(fileItemBean);
            }
        }
        return fileItemBeans;
    }
};

然后你只需要轻轻地加进去,一切就搞定了。

FilePickerManager
    .from(this@SampleActivity)
    .filter(aFilter)
    .forResult(FilePickerManager.REQUEST_CODE)

实际上你可以发挥你的想象力,filter的工作原理就是,把一个纯净的数据集发给你,你搞一些事情后再把它传回去。

所以理论上你可以做一切你想做的事情。

2. 文件类型和甄别器

为了让本框架易于被改装,你实际上可以实现你自己的文件类型,和文件甄别器。看看自定义文件类型和检测器

Clone this wiki locally