我是靠谱客的博主 开心胡萝卜,最近开发中收集的这篇文章主要介绍利用LoaderManager加载相册图片封装了一个类用于加载本地相册,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

封装了一个类用于加载本地相册

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));
}
});
}

最后

以上就是开心胡萝卜为你收集整理的利用LoaderManager加载相册图片封装了一个类用于加载本地相册的全部内容,希望文章能够帮你解决利用LoaderManager加载相册图片封装了一个类用于加载本地相册所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(33)

评论列表共有 0 条评论

立即
投稿
返回
顶部