利用LoaderManager加载相册图片
来源:互联网 发布:约到炮是什么体验知乎 编辑:程序博客网 时间:2024/05/21 22:31
封装了一个类用于加载本地相册
LoaderManager类可以在子线程里进行加载
在activity里面一般可以通过getLoaderManager()方法取得该对象,surpport.v4包的FragmentActivity里获得该对象的方法是getSupportLoaderManager(),我这个类是后者这种情况,具体代码如下
public class LoadLocalPhoto implements LoaderManager.LoaderCallbacks<Cursor>{ //读取图片文件的参数 private static final String STORE_IMAGES[] = { MediaStore.Images.Media.DATA, MediaStore.Images.Media.DISPLAY_NAME, MediaStore.Images.Media.DATE_ADDED, MediaStore.Images.Media._ID }; public FragmentActivity activity; private LoadFinishCallback loadFinishCallback; //构造方法传入当前的Activity public LoadLocalPhoto(FragmentActivity activity){ this.activity = activity; activity.getSupportLoaderManager().initLoader(0,null,this); } @Override public android.support.v4.content.Loader<Cursor> onCreateLoader(int id, Bundle args) { return new CursorLoader(activity, MediaStore.Images.Media.EXTERNAL_CONTENT_URI, STORE_IMAGES, null, null, STORE_IMAGES[2] + " DESC"); } //加载完成调用此方法 @Override public void onLoadFinished(android.support.v4.content.Loader<Cursor> loader, Cursor data) { if (data==null){ return; } List<ImageFolder> folderList = new ArrayList<>(); int count = data.getCount(); if (count>0){ data.moveToFirst(); do { String path = data.getString(data.getColumnIndexOrThrow(MediaStore.Images.Thumbnails.DATA)); File imageFile = new File(path); File folderFile = imageFile.getParentFile(); ImageFolder folder = new ImageFolder(); folder.path = folderFile.getAbsolutePath(); folder.name = folderFile.getName(); if (!folderList.contains(folder)){ List<String> imageList = new ArrayList<>(); imageList.add(path); folder.images = imageList; folderList.add(folder); }else { ImageFolder folder1 = folderList.get(folderList.indexOf(folder)); folder1.images.add(path); } }while (data.moveToNext()); } //接口调用 loadFinishCallback.finish(folderList); } public void setLoadFinishCallback(LoadFinishCallback loadFinishCallback) { this.loadFinishCallback = loadFinishCallback; } @Override public void onLoaderReset(android.support.v4.content.Loader<Cursor> loader) { } public interface LoadFinishCallback{ void finish(List<ImageFolder> folderList); }}
里面的ImageFolder是随便写的一个bean类:
public class ImageFolder { public String name; public String path; public List<String> images; @Override public boolean equals(Object o) { try { ImageFolder other = (ImageFolder) o; return this.path.equalsIgnoreCase(other.path); }catch (ClassCastException e){ e.printStackTrace(); } return super.equals(o); }}
之后在代码里面就可以很简单的使用了:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); new LoadLocalPhoto(this).setLoadFinishCallback(new LoadLocalPhoto.LoadFinishCallback() { @Override public void finish(List<ImageFolder> folderList) { //获取到文件数据就可用进行一系列操作,比如给listview设置adapter listview.setAdapter(new Adapter(folderList)); } }); }
0 0
- 利用LoaderManager加载相册图片
- Android利用Gallery和ImageSwitcher实现在线相册图片预览功能(异步加载图片)
- 利用Gallery和ImageSwitcher实现在线相册图片预览功能(异步加载图片)
- 如何从相册加载图片
- Android相册,利用LruCache、DiskLruCache实现图片的加载,避免出现OOM
- LoaderManager加载器初识
- 利用 AFN 上传相册或拍照图片
- 依据Uri加载相册中图片
- UIImagePickerController从本地相册加载图片
- iOS 从相册加载图片到imageview
- IOS 相册高清图片加载
- 调用系统相册框加载图片
- android 加载系统相册图片并显示
- 利用RxJava加载图片
- LoaderManager.onLoaderFinish加载了两次
- Android加载器LoaderManager.loaderCallbacks
- 图片预加载之预先加载1-相册
- android 仿微信选择相册中的图片跟图片异步加载
- 十个随机数求和
- linux中强大且常用命令:find、grep
- 32. Magento log()方法
- 约瑟夫环的问题与应用(JAVA)
- 使用Android Studio的lint清除无用的资源文件
- 利用LoaderManager加载相册图片
- Cocos2d-JS 笔记(SUN)
- Ruby On Rails--Active Record Query Interface(数据库查询)
- RDD操作详解1——Transformation和Actions概况
- ubuntu远程登录服务器
- 使用ApplicationContext启动activity,发送广播,显示Toast
- Java总结第二篇 异常处理--基本概念
- 经典SQL语句大全
- 文章阅读: network in network