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之类的运算( ...
随机推荐
- db2数据库常见问题
db2数据库不能轻易改变表结构,不然表会进入暂挂状态,造成表被锁住. 解锁表语句:call sysproc.admin_cmd('reorg table <table name>');
- idea远程打断点
(1)用如下方式启动jar java -Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=y -jar durati ...
- SQLite异常 qAdmin: Cannot perform this operation on a closed dataset.【申明:来源于网络】
SQLite异常 qAdmin: Cannot perform this operation on a closed dataset. 当使用 SQLite administrator,打开SQLit ...
- 算法与数据结构(六) 迪杰斯特拉算法的最短路径(Swift版)
上篇博客我们详细的介绍了两种经典的最小生成树的算法,本篇博客我们就来详细的讲一下最短路径的经典算法----迪杰斯特拉算法.首先我们先聊一下什么是最短路径,这个还是比较好理解的.比如我要从北京到济南,而 ...
- 算法与数据结构(三) 二叉树的遍历及其线索化(Swift版)
前面两篇博客介绍了线性表的顺序存储与链式存储以及对应的操作,并且还聊了栈与队列的相关内容.本篇博客我们就继续聊数据结构的相关东西,并且所涉及的相关Demo依然使用面向对象语言Swift来表示.本篇博客 ...
- 记录k8s:k8s1.8.4无坑离线安装
安装部署: 1. 使用vagrant 准备3太虚拟机,自己使用Vbox 准备3太也可以. 2. 按照 https://github.com/gjmzj/kubeasz 安装. 3. 使用letsenc ...
- vue中实现动态切换不同的值
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- [Swift]LeetCode128. 最长连续序列 | Longest Consecutive Sequence
Given an unsorted array of integers, find the length of the longest consecutive elements sequence. Y ...
- [Swift]LeetCode648. 单词替换 | Replace Words
In English, we have a concept called root, which can be followed by some other words to form another ...
- [Swift]LeetCode816. 模糊坐标 | Ambiguous Coordinates
We had some 2-dimensional coordinates, like "(1, 3)" or "(2, 0.5)". Then, we re ...