Android开发过程中的坑及解决方法收录(六)
1. file.listFiles 空指针异常
最近在弄个小项目,类似一个文件管理器,需要获得手机存储里的目录之后显示,但是运行过程中出现错误,搜索了资料,得出了以下的解决办法
问题产生的原因:
- android6.0以上需要动态申请权限,确保自己有读取和写入SD卡的权限
- 以往版本的话,写入SD卡的权限其实是包含了读取SD卡的权限,但是android6.0有所改变,所以得声明读取和写入SD卡的权限,两个权限
- 存在有隐藏文件,在获取列表的时候出现空指针问题
解决方法:
针对第三个问题,我们只需要添加一个判断当前的数组是否为空即可
java.io.File[] childFiles = file.listFiles(new FileFilter() {
@Override
public boolean accept(java.io.File pathname) {
return pathname.isDirectory() || pathname.getName().endsWith(".apk");//筛选文件夹和apk文件,统计为项目数
}
});
if (childFiles != null) {
if (childFiles.length == 0) {
count = "0项";
} else {
for (int i = 0; i < childFiles.length; i++) {
childFilesList.add(new File(childFiles[i].getPath()));
}
count = childFiles.length+"项";
}
}
2. fragment覆盖问题
问题产生原因:
Fragment默认的背景是透明的
解决方法:
把Fragment的背景统一设置为某个颜色即可解决
3. RecyclerView的复用导致图标错乱
还是之前的那个文件管理器项目遇到的问题,如果是文件夹,则显示文件夹的图标,如果是apk安装包,则显示apk图标。
一个文件夹里面有N个文件夹,有几个是apk文件,滑到底,可以看到apk文件显示apk图标,但是,向上滑动,有几个文件夹的图标变成了apk的图标

if (bean.isFile()) {
//如果为文件,则设置图标为apk图标
ImageView imageView = holder.getView(R.id.img_folder);
imageView.setImageDrawable(getApkIcon(holder, bean.getPath()));
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
holder.setViewGone(R.id.img_right);
}
原因:
好像是因为RecyclerView有四层缓存,巴拉巴拉..
解决方法:
由于我们是在onBindViewHolder里面进行绘制每一个item的界面,但是,我们只有一个if语句,
使用if判断条件,之后需要修改某个控件,我们需要补充else语句,不满足条件的则设置控件为原来的样子,也就是显示文件夹图标
if (bean.isFile()) {
//如果为文件,则设置图标为apk图标
ImageView imageView = holder.getView(R.id.img_folder);
imageView.setImageDrawable(getApkIcon(holder, bean.getPath()));
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
holder.setViewGone(R.id.img_right);
} else {
//如果不是的话,设置图标为文件夹图标
ImageView imageView = holder.getView(R.id.img_folder);
imageView.setImageResource(R.drawable.vector_drawable_folder);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
}
4. RecyclerView中的checkbox的选择状态错乱问题
每个item中包含着一个checkbox,之后点击了某个item的checkbox,使其变成了选择状态,和上面的例子类似,当我们往下滑动的时候,会出现几个item的checkbox也变成了选择状态的情况
解决办法:
在onBindViewHolder方法里面给checkbox设置一个click监听器,之后补上相关的逻辑代码,如点击之后要取消选择状态..
Android开发过程中的坑及解决方法收录(六)的更多相关文章
- Android开发过程中的坑及解决方法收录(三)
bug:应用出现了 不幸运的,应用已停止的错误提示 排除问题: 1.intent接收数据的字符串不匹配 2.java常见的NullPointerException(空指针错误),可能由三个原因引起,字 ...
- Android开发过程中的坑及解决方法收录(四)
1.某个控件要放在Linearlayout布局的底部(底部导航条) <LinearLayout xmlns:android="http://schemas.android.com/ap ...
- Android开发过程中的坑及解决方法收录(一)
之前使用了Android Studio的插件直接为button绑定了监听器,并实现onClick方法(我的onClick方法无论点击哪一个都是要实现setcontentview这个方法设置layout ...
- Android开发过程中的坑及解决方法收录(二)
bug 1: bug描述: 无法成功地将edittext中的内容传入数据库中 bug动图: 经过: 最近写了个项目,项目要使用到SQL数据库,由于没有相关知识,便是找到了各种资料开始了自学之旅,在de ...
- Android开发过程中的坑及解决方法收录(五)
1. 导入依赖库出现错误 因为使用的sdk版本不同,使用下列代码强制使用最低版本,25.3.1就是我当前使用的版本号,根据自己的情况修改 configurations.all { resolution ...
- Android开发过程中部分报错解决方法。
初学Android,最近在使用zxing开发一个条码扫描解析的安卓项目中,遇到以下几个问题.贴出来以供参考. 1.Http请求错误 Android4.0以上要求不能把网络请求的操作放在主线程里操 ...
- Windows下虚拟机Linux(CentOS8)扩容设置 - 磁盘扩容中的坑和解决方法
摘要:[原创]转载请注明作者Johnthegreat和本文链接 由于虚拟机空间不足,为了避免重装虚拟机,做了一次无损扩容. 过程中的报错如下: [root@localhost ~]# pvcrea ...
- Android开发过程中使用弱引用解决内存泄露的习惯
Java虽然有垃圾回收,但是仍然存在内存泄露,比如静态变量.缓存或其他长生命周期的对象引用了其他对象,这些被引用的对象就会长期不能被GC释放,导致内存泄露. 弱引用(WeakReference)是解决 ...
- 关于在Android或Java中精度缺失的解决方法
left,right是两个String类型的字符串,myres是一个double类型的变量. 如果我们用下面的语句把left,right先转换为double后直接加法的话,如果作3.3乘3之类的运算( ...
随机推荐
- Hadoop集群搭建-full完全分布式(三)
环境:Hadoop-2.8.5 .centos7.jdk1.8 一.步骤 1).4台centos虚拟机 2). 将hadoop配置修改为完全分布式 3). 启动完全分布式集群 4). 在完全分布式集群 ...
- Java Fileupload
fileupload FileUpload 是 Apache commons下面的一个子项目,用来实现Java环境下面的文件上传功能,与常见的SmartUpload齐名. 组件 1.FileUpLoa ...
- Java后期拓展(一)之Redis
1.NoSQL数据库简介 2.Redis的介绍及安装启动 3.Redis的五大数据类型 4.Redis的相关配置 5.Redis的Java客户端Jedis 6.Redis的事务 7.Redis的持久化 ...
- three.js的wave特效(ivew官网首页波浪特效实现)
查看效果请访问:https://521lbx.github.io/Web3D/index.html公司的好几个vue项目都是用ivew作为UI框架,所以ivew官网时不时就得逛一圈.每一次进首页都会被 ...
- Naïve Media Player, Part 2
项目主页网址: https://github.com/Judylalala/en Q1:如何播放online歌曲? A1:我本来以为会为MediaElement设置一个单独的属性播放online音频. ...
- MQTT在react-native中的运行
mqtt 1.什么是mqtt? MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式 ...
- 数组Array和列表集合ArrayList、LinkedList和Vector的区别
一.ArrayList和Vector的区别 ArrayList与Vector主要从以下方面来说. 1.同步性: Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同 ...
- Java线程中的同步
1.对象与锁 每一个Object类及其子类的实例都拥有一个锁.其中,标量类型int,float等不是对象类型,但是标量类型可以通过其包装类来作为锁.单独的成员变量是不能被标明为同步的.锁只能用在使用了 ...
- github pages + Hexo + node.js 搭建属于自己的个人博客网站
之前我写过一篇用Github实现个人主页的博客:https://www.cnblogs.com/tu-0718/p/8081288.html 后来看到某个大佬写的文章:[5分钟 0元搭建个人独立 ...
- 我们身边那些优秀的.NET开发者-
我们身边那些优秀的.NET开发者----邹琼俊 初识大佬 非常有幸通过博客园认识了邹琼俊邹老师,他也是<ASP.NET企业级开发实战>这本书的作者,这本书的销量达到了将近九千本,在这个实体 ...