图片选择页,按home息屏后再回来,图片一张都不显示了,这个是怎么回事?
tongzhaoxin opened this issue · comments
在onLoadFinished(Loader loader, Cursor data)方法中遍历图片之前添加如下代码就好来了
data.moveToFirst();
moveToFirst 会导致第一张图片丢失,除非再moveToFirst后再重新解析一下数据,还有就是这种处理方式会导致返回后数据刷新的问题,可以在onLoadFinished中删除loader, activity.getSupportLoaderManager().destroyLoader(LOADER_ALL);
把
while(data.moveToNext()){
}
换成
data.moveToFirst();
do{
}while(data.moveToNext());
moveToFirst 会导致第一张图片丢失,除非再moveToFirst后再重新解析一下数据,还有就是这种处理方式会导致返回后数据刷新的问题,可以在onLoadFinished中删除loader, activity.getSupportLoaderManager().destroyLoader(LOADER_ALL);
大神,那这行代码是要加在哪个地方,小白看不懂源码,方便把解决方案贴出完整的代码吗,用其他的确实可以解决,不过正如你所说的返回后又刷新了,你的方案应该更好
moveToFirst 会导致第一张图片丢失,除非再moveToFirst后再重新解析一下数据,还有就是这种处理方式会导致返回后数据刷新的问题,可以在onLoadFinished中删除loader, activity.getSupportLoaderManager().destroyLoader(LOADER_ALL);
我是加在这个方法的最下面,不知道这样是对不对的
//回调接口,通知图片数据准备完成
ImagePicker.getInstance().setImageFolders(imageFolders);
loadedListener.onImagesLoaded(imageFolders);
activity.getSupportLoaderManager().destroyLoader(LOADER_ALL);
ImageDataSourse.java 的onLoadFinished改成这样就行了
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
imageFolders.clear();
if (data != null) {
ArrayList<ImageItem> allImages = new ArrayList<>(); //所有图片的集合,不分文件夹
data.moveToFirst();
do {
//查询数据
String imageName = data.getString(data.getColumnIndexOrThrow(IMAGE_PROJECTION[0]));
String imagePath = data.getString(data.getColumnIndexOrThrow(IMAGE_PROJECTION[1]));
File file = new File(imagePath);
if (!file.exists() || file.length() <= 0) {
continue;
}
long imageSize = data.getLong(data.getColumnIndexOrThrow(IMAGE_PROJECTION[2]));
int imageWidth = data.getInt(data.getColumnIndexOrThrow(IMAGE_PROJECTION[3]));
int imageHeight = data.getInt(data.getColumnIndexOrThrow(IMAGE_PROJECTION[4]));
String imageMimeType = data.getString(data.getColumnIndexOrThrow(IMAGE_PROJECTION[5]));
long imageAddTime = data.getLong(data.getColumnIndexOrThrow(IMAGE_PROJECTION[6]));
//封装实体
ImageItem imageItem = new ImageItem();
imageItem.name = imageName;
imageItem.path = imagePath;
imageItem.size = imageSize;
imageItem.width = imageWidth;
imageItem.height = imageHeight;
imageItem.mimeType = imageMimeType;
imageItem.addTime = imageAddTime;
allImages.add(imageItem);
//根据父路径分类存放图片
File imageFile = new File(imagePath);
File imageParentFile = imageFile.getParentFile();
ImageFolder imageFolder = new ImageFolder();
imageFolder.name = imageParentFile.getName();
imageFolder.path = imageParentFile.getAbsolutePath();
if (!imageFolders.contains(imageFolder)) {
ArrayList<ImageItem> images = new ArrayList<>();
images.add(imageItem);
imageFolder.cover = imageItem;
imageFolder.images = images;
imageFolders.add(imageFolder);
} else {
imageFolders.get(imageFolders.indexOf(imageFolder)).images.add(imageItem);
}
} while (data.moveToNext());
//防止没有图片报异常
if (data.getCount() > 0 && allImages.size()>0) {
//构造所有图片的集合
ImageFolder allImagesFolder = new ImageFolder();
allImagesFolder.name = activity.getResources().getString(R.string.ip_all_images);
allImagesFolder.path = "/";
allImagesFolder.cover = allImages.get(0);
allImagesFolder.images = allImages;
imageFolders.add(0, allImagesFolder); //确保第一条是所有图片
}
}
//回调接口,通知图片数据准备完成
ImagePicker.getInstance().setImageFolders(imageFolders);
loadedListener.onImagesLoaded(imageFolders);
}