在android中从sd卡删除图像

在android中从sd卡删除图像,android,android-imageview,android-gridview,Android,Android Imageview,Android Gridview,我尝试从sd卡、特定文件夹中选择图像并在我的gridView中成功显示。我有一个问题。在gridView onClickListener中,我想按位置删除此图像。奇怪的情况。文件已在我的文件夹中删除,但gridView仍显示图像 private void fetchGalleryImages() { Uri mImageUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; final String[] columns =

我尝试从sd卡、特定文件夹中选择图像并在我的gridView中成功显示。我有一个问题。在gridView onClickListener中,我想按位置删除此图像。奇怪的情况。文件已在我的文件夹中删除,但gridView仍显示图像

    private void fetchGalleryImages() {
    Uri mImageUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
    final String[] columns = {MediaStore.Images.Media.DATA, MediaStore.Images.Media.DATE_ADDED};
    Cursor imagecursor = getContentResolver().query(mImageUri, columns, MediaStore.Images.Media.DATA + " like ? ", new String[]{"%/Download/New Folder%"}, null);
    galleryImageUrls = new ArrayList<>();
    for (int i = 0; i < imagecursor.getCount(); i++) {
        imagecursor.moveToPosition(i);
        int dataColumnIndex = imagecursor.getColumnIndex(MediaStore.Images.Media.DATA);//get column index
        galleryImageUrls.add(imagecursor.getString(dataColumnIndex));//get Image from column index
        Log.e("array path", galleryImageUrls.get(i));
    }
}
private void setUpGridView() {

    imagesAdapter = new GridView_Adapter(CustomGallery_Activity.this, galleryImageUrls, true);
    galleryImagesGridView.setAdapter(imagesAdapter);
    galleryImagesGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            File file = new File(galleryImageUrls.get(position));
            if (file.exists())
            {
                file.delete();
                imagesAdapter = new GridView_Adapter(CustomGallery_Activity.this, galleryImageUrls, true);
                galleryImagesGridView.setAdapter(imagesAdapter);
            }

        }
    });
}

我关闭了应用程序并再次运行,但我有同样的问题。。我想更新我的gridview这是正确的答案。我自己解决了

 private void setUpGridView() {

    imagesAdapter = new GridView_Adapter(CustomGallery_Activity.this, galleryImageUrls, true);
    galleryImagesGridView.setAdapter(imagesAdapter);
    galleryImagesGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            File file = new File(galleryImageUrls.get(position));
            if (file.exists())
            {
                file.delete();
                deleteFileFromMediaManager(galleryImageUrls.get(position));
                galleryImageUrls.remove(position);
                imagesAdapter = new GridView_Adapter(CustomGallery_Activity.this, galleryImageUrls, true);
                galleryImagesGridView.setAdapter(imagesAdapter);
            }

        }
    });
}

private void deleteFileFromMediaManager(String path) {
    try {
        MediaScannerConnection.scanFile(CustomGallery_Activity.this, new String[] { path },
                null, new MediaScannerConnection.OnScanCompletedListener() {
                    public void onScanCompleted(String path, Uri uri) {
                        CustomGallery_Activity.this.getContentResolver()
                                .delete(uri, null, null);
                    }
                });
    } catch (Exception e) {
        e.printStackTrace();
    }

}

不,这并不奇怪。。。galleryImageUrls保持不变,那么您希望得到什么?@Selvin我添加了这一行galleryImageUrls.removeposition;但当我再次运行我的应用程序时,所有图像仍然显示,因为您没有将其从MediaStore db/contentprovider中删除…@Selvin我有文件管理器应用程序,我检查了我的文件夹,它是空的,但gridview仍显示。。你能给我看看解决方案吗?@Selvin谢谢我自己回答。问题解决了。。。
 private void setUpGridView() {

    imagesAdapter = new GridView_Adapter(CustomGallery_Activity.this, galleryImageUrls, true);
    galleryImagesGridView.setAdapter(imagesAdapter);
    galleryImagesGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            File file = new File(galleryImageUrls.get(position));
            if (file.exists())
            {
                file.delete();
                deleteFileFromMediaManager(galleryImageUrls.get(position));
                galleryImageUrls.remove(position);
                imagesAdapter = new GridView_Adapter(CustomGallery_Activity.this, galleryImageUrls, true);
                galleryImagesGridView.setAdapter(imagesAdapter);
            }

        }
    });
}

private void deleteFileFromMediaManager(String path) {
    try {
        MediaScannerConnection.scanFile(CustomGallery_Activity.this, new String[] { path },
                null, new MediaScannerConnection.OnScanCompletedListener() {
                    public void onScanCompleted(String path, Uri uri) {
                        CustomGallery_Activity.this.getContentResolver()
                                .delete(uri, null, null);
                    }
                });
    } catch (Exception e) {
        e.printStackTrace();
    }

}