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

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监听器,之后补上相关的逻辑代码,如点击之后要取消选择状态..

原文地址:https://www.cnblogs.com/kexing/p/10661916.html

时间: 2024-08-09 00:08:09

Android开发过程中的坑及解决方法收录(六)的相关文章

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

1.无法找到自定义View的实例对象 问题描述: 由于经常要使用到两个TextView的布局,所以,我打算将其封装成一个自定义View,封装成功,界面能够成功显示了,但是,想给它设置点击监听器的时候就报错了,错误显示此View的实例为null 解决方法: 经过Android交流群的群友的热心帮忙,终于是找到了原因,因为我重写了两个参数的构造方法,但是调用父类的构造方法的时候却是调用了父类中的单个参数构造方法,调用父类两个参数的构造方法即可解决问题 原文地址:https://www.cnblogs

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

初学Android,最近在使用zxing开发一个条码扫描解析的安卓项目中,遇到以下几个问题.贴出来以供参考. 1.Http请求错误    Android4.0以上要求不能把网络请求的操作放在主线程里操作.使用多线程. 2.java.lang.IllegalStateException: Target host must not be null, or set in parameters.     原因: 连接地址不完整,必须加上"http://". 3.android java.net

记一次SpringBoot 开发中所遇到的坑和解决方法

记一次SpringBoot 开发中所遇到的坑和解决方法 mybatis返回Integer为0,自动转型包空指针异常 当我们使用Integer去接受数据库中表的数据,如果返回的数据中为0,那么Integer便为null,这时候将Interger自动转型为int,则会出现空指针异常 这个时候,我们可以在Service层对Integer的数据进行判断,如果为空,就把它复制为0 // 在pojo中,如果Integer canJoinNun为null 就把值设置为0 if (publishMsg.getC

[转载]关于安装Android Studio的一些问题的解决方法

最近在研究Android编程,在Android Studio安装和使用时遇到了麻烦,从园子里找到了<关于安装Android Studio的一些问题的解决方法>的,很多问题找到了解决办法. 问题1:每次Fetching android sdk component information 这是在检查你的 Android SDK .有人会在这里卡上很长时间,很大的原因就是:网络连接有问题.可以通过配置 hosts(fan*qiang) 的方式来解决. 如果想跳过这一步 对策: 在Android St

Android SDK无法显示更新列表解决方法

解决办法: 第一步: 打开Windows中C:\WINDOWS\system32\drivers\etc\hosts,然后添加以下内容: 203.208.46.146 dl.google.com 203.208.46.146 dl-ssl.google.com 74.125.113.121 developer.android.com 第二步: 打开Android SDK Manager,选上方的菜单Tools,进入Options,在"Force https://- "前面打钩,就可以更

CUDA程序编译过程中产生警告的解决方法

有时候经常使用别人用Tabhost+其它的实现demo.单纯利用Tabhost该如何使用呢? 下面看例子: public class MainActivity extends TabActivity { public TabHost tabHost; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 获取对象 tabHost = getTabH

phpcms v9 中 PHPSSO无法通讯解决方法(PHPSSO无法通讯间接影响phpcms v9注册会员无法通过“重名无法通过”)

问题的由来 怎么样使用 Cocos2d-x 快速开发游戏,方法很简单,你可以看看其自带的例程,或者从网上搜索教程,运行起第一个HelloWorld,然后在 HelloWorld 里面写相关逻辑代码,添加我们的层.精灵等 ~ 我们并不一定需要知道 Cocos2d-x 是如何运行或者在各种平台之上运行,也不用知道 Cocos2d-x 的游戏是如何运行起来的,它又是如何渲染界面的 ~~~ 两个入口 程序入口的概念是相对的,AppDelegate 作为跨平台程序入口,在这之上做了另一层的封装,封装了不同

Android 项目中执行java的main方法

Android 项目中执行java的main方法 导语 今日,在android项目中写了一个工具类,为了简单测试一下输出,就只直接在类中加上了main方法,于是问题来了: 解决方法是网上找到了,已经解决了,在此记录一下. 右击项目名,调出Properties窗口,打开Run/Debug Settings 标签,右边即列出了这个项目中含有main方法的所有java类,双击你要允许的java类:

eclipse导入android项目后出现错误的解决方法

eclipse导入android项目后出现错误的解决方法 出现这样的错误是因为没有为项目指定sdk的原因 为项目指定sdk的方法右键点击工程名称,弹出菜单中点击“Properties->Android”,在Project build target 中指定你要使用的SDK版本即可