Android图片浏览器之图片删除

  

  前一篇介绍了怎么从手机中读取图片文件,放入组件GridView实现网格效果的缩略图显示。

  今天研究了对GridView中的子项(各张小图片)进行删除的操作,参考已有软件,长按图片跳出删除确认框。

  GridView长按事件为OnItemLongClickListener(),顺便说一下单击为OnItemClickListener()。

  直接上代码,长按缩略图中某一张小图后进行删除操作(必须带确认框):

 1 gridviewImg.setOnItemLongClickListener(new GridView.OnItemLongClickListener() {//监听事件
 2             public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
 3                 final View v = view;
 4                 final int p = position;
 5                 final Bundle savedInstanceState1 = savedInstanceState;
 6                 new AlertDialog.Builder(MainActivity.this)
 7                 .setTitle(R.string.long_click)
 8                 .setMessage(R.string.delete_firm)
 9                 .setPositiveButton(R.string.Ok,
10                         new DialogInterface.OnClickListener() {
11                             @Override
12                             public void onClick(DialogInterface dialog, int which) {
13                                 File removeFile = new File(fullPathImg.get(p));
14                                 if (removeFile.exists()) {
15                                     removeFile.delete();
16                                     //refresh the gridview
17                                     //v.setVisibility(v.GONE);
18                                     adapterImg.notifyDataSetChanged();
19                                     finish();
20                                     Intent intent = new Intent(MainActivity.this, MainActivity.class);
21                                     startActivity(intent);
22
23                                     Intent media = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
24                                     Uri contentUri = Uri.fromFile(removeFile);
25                                     media.setData(contentUri);
26                                     MainActivity.this.sendBroadcast(media);
27                                     //gridviewImg.postInvalidate();
28                                     //gridviewImg.invalidate();
29                                     //onCreate(savedInstanceState1);  //failed
30                                 }
31                             }
32                         })
33                 .setNegativeButton(R.string.Cancel,
34                         new DialogInterface.OnClickListener() {
35                             @Override
36                             public void onClick(DialogInterface dialog, int which) {
37                                 ;
38                             }
39                         }
40                 ).show();
41                 return true;
42             }
43         });

  虽然这段代码做的事情很简单,但有很多细节需要注意:

  1、删除GridView中的图片时,实质是将SD卡中的真实图片给删除了,因此涉及到文件的操作,定位是根据传入的position参数;

  2、确认对话框使用的是DialogInterface,在其点击响应事件中进行具体实现时不能直接使用GridView长按传入的参数,如上面的position等,

  系统提示是需要final修饰的变量才行。因此需要在开头重新定义了对应的final变量来满足要求;

1 final View v = view;
2 final int p = position;
3  final Bundle savedInstanceState1 = savedInstanceState;

  3、刚开始进行实现文件删除功能时,查阅的资料均是下面几行代码:

1 File removeFile = new File(fullPathImg.get(p));
2  if (removeFile.exists()) {
3     removeFile.delete();
4 }

  其中fullPathImg再解释一下,其为存放图片完整路径的ArrayList<String>变量,调用其get()方法(以索引作为参数)即可获取图片路径。

  判断文件的存在性也非常重要,之后便是调用delete()方法进行删除,但是发现了一个问题:

  文件管理器中已经不存在删除的图片名称,但是手机自带图片浏览器中仍然可以搜索到,电脑中打开手机对应文件夹也存在该文件,只不过是已损坏文件?

  这是很不可思议的,接着又是一通查阅、提问,不得不说网上找的大部分文章都没有提及,只到delete()为止。

  后来在Android开源社区的提问得到了准确的回答,在对文件进行删除或保存后,需要对系统进行更新,是通过广播的形式来完成。

  代码也挺简洁:

1 Intent media = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
2 Uri contentUri = Uri.fromFile(removeFile);
3 media.setData(contentUri);
4 MainActivity.this.sendBroadcast(media);

  就是这四行代码,完成了手机文件信息的同步。当然,也可以是两行:

  

1 Intent media = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(removeFile));
2 MainActivity.this.sendBroadcast(media);

  关于Intent和Uri的知识和用途太广了,还得慢慢学习。

  4、玩过相册的朋友应该都清楚,再删除一张图片后,软件会自动将那个空缺补上(更新GridView,当然手机自带软件不会,需要重新打开)。

  其实这里面完成了两件事情,第一,将GridView中的元素更新;第二,将显示GridView的主界面更新。

  代码如下:

1 adapterImg.notifyDataSetChanged();
2 finish();
3 Intent intent = new Intent(MainActivity.this, MainActivity.class);
4 startActivity(intent);

  finish()方法的作用是结束当前的Activity,GridView中的元素是由ImageAdapter类决定的,所以只需向后者发送数据改变的通知即可(notifyDataSetChanged())。

  代码中注释部分是开始时尝试更新GridView的方法,没有达到预期的效果。

  最后放上一张效果图。

时间: 2024-08-18 03:30:49

Android图片浏览器之图片删除的相关文章

Android图片浏览器之缩略图

最近在自学Android,尝试实现一般手机上都存在的图片浏览器,从缩略图开始. 直接上图,这是google手机自带Photos图片浏览器. 通过查阅资料了解到,在实现缩略图之前需要做的工作有: 1.查找手机中所有图片,包括截图.拍照.通过USB从电脑中黏贴过来等方式存储在若干个文件夹的,  将图片完整路径存储在字符串数组中: 2.对于某一幅图片,不管是缩略也好,全屏显示也好,需要在一种组件进行显示(只是图片的大小不一样): 3.寻找一种组件,可以利用来存放各个缩略图,完成网格般的效果: 对于第一

android在线浏览图片

MainActivity.java package com.example.internetimageview;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import android.app.Activity;import android.graph

android 图库浏览的功能有没有谁做过。主要是拿到图片和视频后排序的问题。

============问题描述============ android 图库浏览的功能有没有谁做过.主要是拿到图片和视频后排序的问题. 现在要做一个类似图库的查看功能,要所有sd卡扫描出来的图片和视频按照时间先后排序.有人做过吗? ============解决方案1============ 排序不会么?用Java Collections.sort 方法. ============解决方案2============ 这个搜一下应该有很多吧,然后自己改改.获取一下日期信息排序.

Android之——史上最简单最酷炫的3D图片浏览效果的实现

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/48052709 如今,Android开发已经成为移动互联开发领域中一支不可或缺的力量,那么Android中要实现3D的效果那也就是合情合理的事情了.那么,如何在Android中实现像IOS中那样的3D图片浏览效果呢?下面,鄙人将重磅推出今天的重点博文,和大家一起在Android中实现酷炫的3D图片浏览效果. 一.原理 老规矩,还是要来啰嗦下原理的东西. 整体实现是以手机屏幕的正中间

Android高仿微信图片选择上传工具

源码托管地址:https://github.com/SleepyzzZ/photo-selector 话不多说,先上效果图(高仿微信图片选择器): 图片选择界面: 图片预览界面: 批量上传图片: 实现的功能介绍: 1.图片异步加载,使用Glide开源库实现加载; 2.图片的预览界面,支持左右滑动,双击放大浏览; 3.图片批量上传,使用OkHttp来实现与Servlet服务器的通信; 使用方法(Android Studio): 新建工程,File->New->Import Module导入pho

Android工程中加入图片,报错cannot be resolved or is not a field

SDK和ADT为22.6.2版本 工程为4.4.2 今天在写Android代码的时候,往工程中加入了几张图片,然后在代码中使用R.drawable调用时,一直报错 cannot be resolved or is not a field 然后我查看了gen目录下的R.java文件,发现里面已经有我加入的图片资源ID了,觉得很奇怪,一般是无法生成R.java文件的时候才会出现这种现象啊 在网上查了资料也未见有可以解决我这个问题的方法,然后我就把我的代码从头到尾重新看了一遍,开始也没有发现什么异常,

图片浏览(点击放大缩小支持多张图片浏览)

大神写的,我就参考参考啦! 从主布局开始了 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_pare

看大数据时代下的IT架构(1)图片服务器之演进史

        柯南君的公司最近产品即将上线,由于产品业务对图片的需求与日俱增,花样百出,与此同时,在大数据时代,大流量的冲击下,对图片服务器的压力可想而知,那么今天,柯南君结合互联网的相关热文,加上自己的一点实践经验,与君探讨,与君共勉! 一.图片服务器的重要性 当前,不管哪一家网站(包括 电商行业.O2O行业.互联网行业等),不管哪一种渠道 (包括 web端,APP端甚至一些SNS应用),在大数据时代下,在内容为王的前提下,对图片的需求量越来越大,柯南君的公司是一家O2O公司,也不例外,图片

Android拖动和缩放图片

Android拖动和缩放图片 2014年5月9日 我们在使用应用其中常常须要浏览图片.比方在微信其中.点击图片之后能够对图片进行缩放. 本博客介绍怎样对图片进行拖拽和缩放.这首先要了解Android中的触摸机制了,在屏幕中有手指按下.手指抬起.手指移动还有多个手指触摸的动作. 我们要实现对图片的拖拽和缩放就是要基于这些动作来进行逻辑处理. 图片的拖拽主要是计算手指開始的位置与当前手指的位置关系,来进行平移的,详细能够看代码. 图片的缩放就涉及到计算两点之间的距离来得到缩放比,调用矩阵方法来达到缩