1. file.listFiles 空指针异常

最近在弄个小项目,类似一个文件管理器,需要获得手机存储里的目录之后显示,但是运行过程中出现错误,搜索了资料,得出了以下的解决办法

问题产生的原因:

  1. android6.0以上需要动态申请权限,确保自己有读取和写入SD卡的权限
  2. 以往版本的话,写入SD卡的权限其实是包含了读取SD卡的权限,但是android6.0有所改变,所以得声明读取和写入SD卡的权限,两个权限
  3. 存在有隐藏文件,在获取列表的时候出现空指针问题

解决方法:

针对第三个问题,我们只需要添加一个判断当前的数组是否为空即可

 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开发过程中的坑及解决方法收录(六)的更多相关文章

  1. Android开发过程中的坑及解决方法收录(三)

    bug:应用出现了 不幸运的,应用已停止的错误提示 排除问题: 1.intent接收数据的字符串不匹配 2.java常见的NullPointerException(空指针错误),可能由三个原因引起,字 ...

  2. Android开发过程中的坑及解决方法收录(四)

    1.某个控件要放在Linearlayout布局的底部(底部导航条) <LinearLayout xmlns:android="http://schemas.android.com/ap ...

  3. Android开发过程中的坑及解决方法收录(一)

    之前使用了Android Studio的插件直接为button绑定了监听器,并实现onClick方法(我的onClick方法无论点击哪一个都是要实现setcontentview这个方法设置layout ...

  4. Android开发过程中的坑及解决方法收录(二)

    bug 1: bug描述: 无法成功地将edittext中的内容传入数据库中 bug动图: 经过: 最近写了个项目,项目要使用到SQL数据库,由于没有相关知识,便是找到了各种资料开始了自学之旅,在de ...

  5. Android开发过程中的坑及解决方法收录(五)

    1. 导入依赖库出现错误 因为使用的sdk版本不同,使用下列代码强制使用最低版本,25.3.1就是我当前使用的版本号,根据自己的情况修改 configurations.all { resolution ...

  6. Android开发过程中部分报错解决方法。

    初学Android,最近在使用zxing开发一个条码扫描解析的安卓项目中,遇到以下几个问题.贴出来以供参考. 1.Http请求错误    Android4.0以上要求不能把网络请求的操作放在主线程里操 ...

  7. Windows下虚拟机Linux(CentOS8)扩容设置 - 磁盘扩容中的坑和解决方法

    摘要:[原创]转载请注明作者Johnthegreat和本文链接 由于虚拟机空间不足,为了避免重装虚拟机,做了一次无损扩容.   过程中的报错如下: [root@localhost ~]# pvcrea ...

  8. Android开发过程中使用弱引用解决内存泄露的习惯

    Java虽然有垃圾回收,但是仍然存在内存泄露,比如静态变量.缓存或其他长生命周期的对象引用了其他对象,这些被引用的对象就会长期不能被GC释放,导致内存泄露. 弱引用(WeakReference)是解决 ...

  9. 关于在Android或Java中精度缺失的解决方法

    left,right是两个String类型的字符串,myres是一个double类型的变量. 如果我们用下面的语句把left,right先转换为double后直接加法的话,如果作3.3乘3之类的运算( ...

随机推荐

  1. Centos7 编译安装 Nginx PHP Mariadb Memcached 扩展 ZendOpcache扩展 (实测 笔记 Centos 7.3 + Openssl 1.1.0e + Mariadb 10.1.22 + Nginx 1.12.0 + PHP 7.1.4 + Laravel 5.4 )

    环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G,双网卡) 系统版本:CentOS-7-x86_64-Minimal-1611.iso 安装步骤: 1.准备 1.0 查看硬 ...

  2. 严重: A child container failed during start

    四月 20, 2019 4:54:28 下午 org.apache.coyote.AbstractProtocol init 信息: Initializing ProtocolHandler [&qu ...

  3. 用for; while...do; do...while; 写出九九乘法表

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. Python入门(青铜篇)

    一.定义变量 print('hello world \n') 定义变量name='单宝梁' #定义字符串一定加‘’age=28 引号使用words="i'm 单宝梁" #字符串里有 ...

  5. React-Native的基本控件属性方法,对React-Native的学习,从熟悉基本控件开始。

    对React-Native的学习,从熟悉基本控件开始. View 属性方法 序号 名称 属性Or方法 类型 说明 1 accessibilityLabel 属性 string   2 accessib ...

  6. [Swift]LeetCode61. 旋转链表 | Rotate List

    Given a linked list, rotate the list to the right by k places, where k is non-negative. Example 1: I ...

  7. [Swift]LeetCode389. 找不同 | Find the Difference

    Given two strings s and t which consist of only lowercase letters. String t is generated by random s ...

  8. [Swift]LeetCode628. 三个数的最大乘积 | Maximum Product of Three Numbers

    Given an integer array, find three numbers whose product is maximum and output the maximum product. ...

  9. [Swift]LeetCode728. 自除数 | Self Dividing Numbers

    A self-dividing number is a number that is divisible by every digit it contains. For example, 128 is ...

  10. [Swift]LeetCode859. 亲密字符串 | Buddy Strings

    Given two strings A and B of lowercase letters, return true if and only if we can swap two letters i ...