Android图片浏览器之图片删除
前一篇介绍了怎么从手机中读取图片文件,放入组件GridView实现网格效果的缩略图显示。
今天研究了对GridView中的子项(各张小图片)进行删除的操作,参考已有软件,长按图片跳出删除确认框。
GridView长按事件为OnItemLongClickListener(),顺便说一下单击为OnItemClickListener()。
直接上代码,长按缩略图中某一张小图后进行删除操作(必须带确认框):
gridviewImg.setOnItemLongClickListener(new GridView.OnItemLongClickListener() {//监听事件
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
final View v = view;
final int p = position;
final Bundle savedInstanceState1 = savedInstanceState;
new AlertDialog.Builder(MainActivity.this)
.setTitle(R.string.long_click)
.setMessage(R.string.delete_firm)
.setPositiveButton(R.string.Ok,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
File removeFile = new File(fullPathImg.get(p));
if (removeFile.exists()) {
removeFile.delete();
//refresh the gridview
//v.setVisibility(v.GONE);
adapterImg.notifyDataSetChanged();
finish();
Intent intent = new Intent(MainActivity.this, MainActivity.class);
startActivity(intent); Intent media = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
Uri contentUri = Uri.fromFile(removeFile);
media.setData(contentUri);
MainActivity.this.sendBroadcast(media);
//gridviewImg.postInvalidate();
//gridviewImg.invalidate();
//onCreate(savedInstanceState1); //failed
}
}
})
.setNegativeButton(R.string.Cancel,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
;
}
}
).show();
return true;
}
});
虽然这段代码做的事情很简单,但有很多细节需要注意:
1、删除GridView中的图片时,实质是将SD卡中的真实图片给删除了,因此涉及到文件的操作,定位是根据传入的position参数;
2、确认对话框使用的是DialogInterface,在其点击响应事件中进行具体实现时不能直接使用GridView长按传入的参数,如上面的position等,
系统提示是需要final修饰的变量才行。因此需要在开头重新定义了对应的final变量来满足要求;
final View v = view;
final int p = position;
final Bundle savedInstanceState1 = savedInstanceState;
3、刚开始进行实现文件删除功能时,查阅的资料均是下面几行代码:
File removeFile = new File(fullPathImg.get(p));
if (removeFile.exists()) {
removeFile.delete();
}
其中fullPathImg再解释一下,其为存放图片完整路径的ArrayList<String>变量,调用其get()方法(以索引作为参数)即可获取图片路径。
判断文件的存在性也非常重要,之后便是调用delete()方法进行删除,但是发现了一个问题:
文件管理器中已经不存在删除的图片名称,但是手机自带图片浏览器中仍然可以搜索到,电脑中打开手机对应文件夹也存在该文件,只不过是已损坏文件?
这是很不可思议的,接着又是一通查阅、提问,不得不说网上找的大部分文章都没有提及,只到delete()为止。
后来在Android开源社区的提问得到了准确的回答,在对文件进行删除或保存后,需要对系统进行更新,是通过广播的形式来完成。
代码也挺简洁:
Intent media = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
Uri contentUri = Uri.fromFile(removeFile);
media.setData(contentUri);
MainActivity.this.sendBroadcast(media);
就是这四行代码,完成了手机文件信息的同步。当然,也可以是两行:
Intent media = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(removeFile));
MainActivity.this.sendBroadcast(media);
关于Intent和Uri的知识和用途太广了,还得慢慢学习。
4、玩过相册的朋友应该都清楚,再删除一张图片后,软件会自动将那个空缺补上(更新GridView,当然手机自带软件不会,需要重新打开)。
其实这里面完成了两件事情,第一,将GridView中的元素更新;第二,将显示GridView的主界面更新。
代码如下:
adapterImg.notifyDataSetChanged();
finish();
Intent intent = new Intent(MainActivity.this, MainActivity.class);
startActivity(intent);
finish()方法的作用是结束当前的Activity,GridView中的元素是由ImageAdapter类决定的,所以只需向后者发送数据改变的通知即可(notifyDataSetChanged())。
代码中注释部分是开始时尝试更新GridView的方法,没有达到预期的效果。
最后放上一张效果图。
Android图片浏览器之图片删除的更多相关文章
- Android图片浏览器之缩略图
项目源码:http://files.cnblogs.com/files/tgyf/app.rar. 最近在自学Android,尝试实现一般手机上都存在的图片浏览器,从缩略图开始. 直接上图,这是goo ...
- Android 高级UI设计笔记14:Gallery(画廊控件)之 3D图片浏览
1. 利用Gallery组件实现 3D图片浏览器的功能,如下: 2. 下面是详细的实现过程如下: (1)这里我是测试性代码,我的图片是自己添加到res/drawable/目录下的,如下: 但是开发中不 ...
- 【转】android如何浏览并选择图片 音频 视频
转自:http://www.cnblogs.com/top5/archive/2012/03/06/2381986.html 这几天 在学习并开发android系统的图片浏览 音频 视频 的浏览 ...
- 一款基于 Android 开发的离线版的 MM 图片浏览 App
一款离线版的 MM 图片浏览 App,有点类似掌上百度的图片专栏应用.图片采用瀑布流展示方式,点击图片集,支持左右手势滑动切换图片:支持放大缩小功能. 实现功能:1)图片完全离线,不耗个人 GPRS ...
- Android 异步加载图片,使用LruCache和SD卡或手机缓存,效果非常的流畅
Android 高手进阶(21) 版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请注明出处http://blog.csdn.net/xiaanming/article/details ...
- ViewPager 可左右滑动和缩放的图片浏览
最近因为要做一个项目,需要使用到图片的浏览.我就自己在网上找了些资料,然后加以修改整理后出来一个demo,希望可以帮助到需要的人.同时这也是我第一个技术博客. 在做之前首先需要了解一下什么是ViewP ...
- 第17讲- UI常用组件之ImageView图片浏览
第17讲 UI常用组件之ImageView图片浏览 二.图片浏览ImageView ImageView就是一个用来显示图片的视图: ImageView常见属性 常见属性 对应方法 说明 android ...
- Android拖动和缩放图片
Android拖动和缩放图片 2014年5月9日 我们在使用应用其中常常须要浏览图片.比方在微信其中.点击图片之后能够对图片进行缩放. 本博客介绍怎样对图片进行拖拽和缩放.这首先要了解Android中 ...
- Android 性能优化——之图片的优化
Android 性能优化——之图片的优化 在Android性能优化中,我们会发现占内存最大的和对性能影响最大的往往是图片资源,其次是控件资源.相对来说,其他的资源的影响会小一点.这里我就先对图片资源的 ...
随机推荐
- centOS 6.5下升级mysql,从5.1升级到5.7
1.备份数据库,升级MySQL通常不会丢失数据,但保险起见,我们需要做这一步.输入命令: mysqldump -u xxx -h xxx -P 3306 -p --all-databases > ...
- [转]JavaScript实现 页面滚动图片加载
本文转自:http://www.cnblogs.com/Darren_code/archive/2011/07/21/LoadImage.html 又到了这个月的博客时间了,原计划是打算在这个月做一个 ...
- 深搜+DP剪枝 codevs 1047 邮票面值设计
codevs 1047 邮票面值设计 1999年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description ...
- Network client/server
<Beginning Linux Programming_4th> chapter 15 Sockets 1 A simple local client/server 1) clie ...
- python中如何将str转换成dict
>>>user "{'a':'b'}" >>>b = eval(user) >>>b {'a':'b'}
- SSO - 我们为何需要单点登录系统
SSO,Single Sign On,也就是单点登录,保证一个账户在多个系统上实现单一用户的登录 现在随着网站的壮大,很多服务会进行拆分,会做SOA服务,会使用dubbo做微服务,或者简单的小型分布式 ...
- AC日记——机器翻译 洛谷 P1540
题目背景 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 题目描述 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单词,软件会先 ...
- Unity 跑酷Demo难题总结
问题1:路面拼接处理 在拼接路的时候,如果两个路挨的太近就会出现贴图闪烁,如下所示 解决办法 如果把路改小就会出现断层,但不会出现贴图闪烁 PS:我是把贴图放在Cube上的,所以路是有厚度. 附注 刚 ...
- java 8-6 抽象的练习
1. 猫狗案例 具体事物:猫,狗 共性:姓名,年龄,吃饭 分析:从具体到抽象 猫: 成员变量:姓名,年龄 构造方法:无参,带参 成员方法:吃饭(猫吃鱼) 狗: 成员变量:姓名,年龄 构造方法:无参,带 ...
- 报错"the geometry has no Z values"处理
); //将Z值设置为0 //IPoint point = (IPoint)pGeo; //point.Z = 0; } else { IZAwa ...