PhotoPicker
PhotoPicker copied to clipboard
下了你的工程,用了glide4.8后,发现图片显示是上一次拍的照片
发现第一次拍照不刷新列表,再一次拍就是上次的图片
在MediaStoreHelper这个类中onLoadFinished(Loader<Cursor> loader, Cursor data)方法中注释掉data.moveToFirst();这行代码即可。亲测可行
查询得到的cursor是指向第一条记录之前的,因此查询得到cursor后第一次调用moveToFirst或moveToNext都可以将cursor移动到第一条记录上。
参考MediaStoreHelper#onLoadFinished方法中的注释:
@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.getString(R.string.__picker_all_image));
photoDirectoryAll.setId("ALL");
//data.moveToFirst();
if (!data.moveToFirst()) {
return;
}
//如果用使用moveFirst做了判断,那么执行moveToNext之前要moveToPrevious。否则会少加载一张照片,也就所谓的显示上一张照片
data.moveToPrevious();
while (data.moveToNext()) {
int imageId = data.getInt(data.getColumnIndexOrThrow(_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));
long size = data.getInt(data.getColumnIndexOrThrow(SIZE));
if (size < 1)
continue;
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) {
}
}
楼上厉害啊。测试可行。