遍历图片文件,返回目录集合
来源:互联网 发布:一架箜篌多少钱知乎 编辑:程序博客网 时间:2024/06/05 16:38
使用Android自身的LoaderManager
public class MediaStoreHelper { //所有图片的目录放在第一个位置 public final static int INDEX_ALL_PHOTOS = 0; //是否查找gif图片 public final static String EXTRA_SHOW_GIF = "SHOW_GIF"; public static void getPhotoDirs(FragmentActivity activity, Bundle args, PhotosResultCallback resultCallback) { activity.getSupportLoaderManager().initLoader(0, args, new PhotoDirLoaderCallbacks(activity, resultCallback)); } //LoaderManager的回调 static class PhotoDirLoaderCallbacks implements LoaderManager.LoaderCallbacks<Cursor> { private WeakReference<Context> context; private PhotosResultCallback resultCallback; public PhotoDirLoaderCallbacks(Context context, PhotosResultCallback resultCallback) { this.context = new WeakReference<>(context); this.resultCallback = resultCallback; } @Override public Loader<Cursor> onCreateLoader(int id, Bundle args) { return new PhotoDirectoryLoader(context.get(), args.getBoolean(EXTRA_SHOW_GIF, false)); } @Override public void onLoadFinished(Loader<Cursor> loader, Cursor data) { if (data == null) return; List<PhotoDirectory> directories = new ArrayList<>(); PhotoDirectory photoDirectoryAll = new PhotoDirectory(); photoDirectoryAll.setName(context.get().getString(R.string.publish_all_photo)); photoDirectoryAll.setId("ALL"); while (data.moveToNext()) { //图片id int imageId = data.getInt(data.getColumnIndexOrThrow(_ID)); //目录id String bucketId = data.getString(data.getColumnIndexOrThrow(BUCKET_ID)); //目录名称 String name = data.getString(data.getColumnIndexOrThrow(BUCKET_DISPLAY_NAME)); String path = data.getString(data.getColumnIndexOrThrow(DATA)); PhotoDirectory photoDirectory = new PhotoDirectory(); photoDirectory.setId(bucketId); photoDirectory.setName(name); if (!directories.contains(photoDirectory)) { photoDirectory.setCoverPath(path); photoDirectory.addPhoto(imageId, path); photoDirectory.setDateAdded(data.getLong(data.getColumnIndexOrThrow(DATE_ADDED))); directories.add(photoDirectory); } else { directories.get(directories.indexOf(photoDirectory)).addPhoto(imageId, path); } photoDirectoryAll.addPhoto(imageId, path); } if (photoDirectoryAll.getPhotoPaths().size() > 0) { photoDirectoryAll.setCoverPath(photoDirectoryAll.getPhotoPaths().get(0)); } directories.add(INDEX_ALL_PHOTOS, photoDirectoryAll); if (resultCallback != null) { resultCallback.onResultCallback(directories); } } @Override public void onLoaderReset(Loader<Cursor> loader) { } } public interface PhotosResultCallback { void onResultCallback(List<PhotoDirectory> directories); }}
具体的查询参数设置
public class PhotoDirectoryLoader extends CursorLoader { final String[] IMAGE_PROJECTION = { Media._ID, Media.DATA, Media.BUCKET_ID, Media.BUCKET_DISPLAY_NAME, Media.DATE_ADDED }; public PhotoDirectoryLoader(Context context, boolean showGif) { super(context); setProjection(IMAGE_PROJECTION); setUri(Media.EXTERNAL_CONTENT_URI); setSortOrder(Media.DATE_ADDED + " DESC"); setSelection( MIME_TYPE + "=? or " + MIME_TYPE + "=? or "+ MIME_TYPE + "=? " + (showGif ? ("or " + MIME_TYPE + "=?") : "")); String[] selectionArgs; if (showGif) { selectionArgs = new String[] { "image/jpeg", "image/png", "image/jpg","image/gif" }; } else { selectionArgs = new String[] { "image/jpeg", "image/png", "image/jpg" }; } setSelectionArgs(selectionArgs); }}
调用方式
mDirectories = new ArrayList<>(); Bundle mediaStoreArgs = new Bundle(); mediaStoreArgs.putBoolean(MediaStoreHelper.EXTRA_SHOW_GIF, false); MediaStoreHelper.getPhotoDirs(this, mediaStoreArgs, new MediaStoreHelper.PhotosResultCallback() { @Override public void onResultCallback(List<PhotoDirectory> dirs) { mDirectories.clear(); mDirectories.addAll(dirs); //等目录初始化结束后再添加选中图片所在的目录 for (int i = 0; i < selectPhotoList.size(); i++) { addSelectDirectories(selectPhotoList.get(i)); } } });
目录对象比较是否为同一个对象
0 0
- 遍历图片文件,返回目录集合
- 遍历指定目录的文件并返回
- php_遍历目录_返回文件数组
- File递归遍历目录,返回文件夹及文件
- 遍历SD卡,获取含有图片文件的文件夹集合
- PHP编程----遍历目录得到图片文件并输出
- 遍历指定目录下的图片文件 显示在gridview
- php遍历目录里的css文件 下载图片
- php遍历目录里的css文件 下载图片
- 遍历json返回的集合
- 遍历文件目录, 以路经为键值返回目录下所有文件名
- Python:递归遍历目录,统计目录大小,并以列表的形式返回所有py文件
- JSP遍历文件目录
- 遍历文件目录
- CFileFind 遍历文件目录
- 递归遍历目录文件
- 遍历文件目录
- 遍历目录得到文件
- 【指导】node & npm 安装(ubuntu)
- 微信小程序之MaterialDesign(二)--view的ripple、reveal效果
- 对自己的一个自我提醒,人生路很远,不可走偏!
- 未来音乐的格式——Opus格式
- [Codeforces Round #357 DIV2D (CF681D)] Gifts by the List
- 遍历图片文件,返回目录集合
- 一个程序员的2016年总结
- 一位资深程序员大牛给予Java初学者的学习建议
- React Native学习视频与项目
- chrome浏览器input[type=file]选择zip、exe等文件卡顿解决办法
- PHP基础之类型转换+外部变量
- GIt的上传代码
- Android面试题整理(附有答案)
- mongodb 索引创建、查询分析