PhotoPicker icon indicating copy to clipboard operation
PhotoPicker copied to clipboard

下了你的工程,用了glide4.8后,发现图片显示是上一次拍的照片

Open xyStephenZhou opened this issue 4 years ago • 4 comments

发现第一次拍照不刷新列表,再一次拍就是上次的图片

xyStephenZhou avatar Aug 02 '19 06:08 xyStephenZhou

在MediaStoreHelper这个类中onLoadFinished(Loader<Cursor> loader, Cursor data)方法中注释掉data.moveToFirst();这行代码即可。亲测可行

shl0703 avatar Aug 05 '19 02:08 shl0703

查询得到的cursor是指向第一条记录之前的,因此查询得到cursor后第一次调用moveToFirst或moveToNext都可以将cursor移动到第一条记录上。

shl0703 avatar Aug 05 '19 03:08 shl0703

参考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) {

        }
    }

makecloud avatar Nov 28 '19 07:11 makecloud

楼上厉害啊。测试可行。

udofly avatar Jun 09 '20 01:06 udofly