前言

在使用 ActionBar的时候,有时候会爆出空指针异常,这是由于应用没有获取到 ActionBar 导致的,而导致应用没有获取到 ActionBar 的原因比較多。所以我们以下就来总结一下 ActionBar 获取不到的错误原因。

解决的方法

  1. 检查你的应用是否设置了没有 ActionBar 的主题Theme。或者直接设置了 NoActionBar或NoTitleBar 属性,主要要检查这几点:检查 AndroidManifest.xml 中的 标签中的theme属性。然后检查各个 Activity 标签中是否有不同的 Theme 导致这个界面的 ActionBar 无法显示,@android:style/Theme.NoTitleBar<item name="windowActionBar">false</item>

    <item name="android:windowNoTitle">true</item>
    这种属性都会使应用中的 ActionBar消失,切记。假设你要使用ActionBar,则一定要清除掉这些Theme属性设置,假设你的项目中 res 文件夹下除了 values 文件夹外。还有其它的res/values-v11,style/values-v14等,则这些文件夹中的 styles.xml 都须要检查一下,最后再检查下 Activity 代码中是否动态设置了全屏或者不显示TitleBar,代码例如以下:

    //requestWindowFeature(Window.FEATURE_NO_TITLE);

    //getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);



    上面的两句代码。上面一句设置Activity不显示TitleBar, 下一句则设置Activity为全屏模式,这两句代码都会导致 ActionBar

    无法显示,从而使 getActionBar()获取失败,假设你的项目中的 Activity 有父一级别的 Activity,则也须要将父一级别的Activity中的NoTitle和全屏代码凝视掉。.
  2. 假设你不确定你的应用所用的主题 Theme 是否支持 ActionBar,能够在 res/values.xml 文件里设置为Theme.AppCompat,这是 AppCompat 中的Theme主题。能够保证低版本号Android上也能够使用 ActionBar(注意:res/values,res/values-v11,res/values-v14等文件夹中的style都要进行style设置,而且都要注意:不要设置成第1条中会禁止ActionBar显示的主题,但能够设置为不同种类的主题),另外,在 Acticity 中获取 ActionBar 的时候(getActionBar()或getSupportBar()), 须要在 setContentView(R.layout.main)之后调用。
  3. 假设你的项目使用的是 android.app.ActionBar,则须要把你应用的最低支持版本号改为11(Android 3.0),使用 getActionBar() 来获取ActionBar,假设你的项目要支持Android 3.0以下,则你的项目须要引入最新的 AppCompat 兼容包,然后将 ActionBar引用改为 android.support.v7.app.ActionBar,并使用 getSupportActionBar 来获取 ActionBar;
  4. 除了以上的原因可能导致 ActionBar 获取为空的话,还有其它的原因导致 getActionBar() 获取失败,比如我在网上查找的时候。有人的项目是在Android SDK 2.2上新建的,当他使用 ActionBar 的时候将 AndroidManifest.xml 中的 minSdkVersion设置为11后(),发现 getActionBar() 获取失败是由于项目中没有 res/values-v11和res/values-v14和当中的style.xml文件。我近期遇到的 getActionBar() 为null是在 Eclipse 中导入了一个别人发给我的项目,可是在他的电脑上编译执行的apk getActionBar(), 但在我的电脑上则不行,试了上面的几种方法也不行,最后,我把这个项目导入到了 Android Studio 中,最终能够正常执行了。

假设大家有其它的有关 getActionBar() 为null的问题,方法和经验。欢迎讨论交流。

參考链接

http://vcsos.com/Article/pageSource/150125/20150125093506.shtml

http://stackoverflow.com/questions/27959107/getting-the-null-pointer-exception-in-the-getactionbar-method/27960390

http://www.apkbus.com/android-130755-1-1.html

http://www.cnblogs.com/shortboy/archive/2013/04/18/3029029.html

http://stackoverflow.com/questions/6867076/getactionbar-returns-null

http://blog.csdn.net/yueqinglkong/article/details/39577749

http://stackoverflow.com/questions/8499181/actionbar-throws-nullpointerexception

http://stackoverflow.com/questions/28255552/nullpointerexception-caused-by-getactionbar

【Android】getActionBar()为null的解决方法总结的更多相关文章

  1. getActionBar()为null的解决方法总结(引用他人)

    最近在看android actionBar的使用,环境为AndroidStudio,建一个简单的工程,功能为:两个按钮,一个单击用于显示actionbar,一个用于隐藏actionbar.默认acti ...

  2. Android webview 写入cookie的解决方法以及一些属性设置

    原文地址:https://www.2cto.com/kf/201703/616868.html Android webview 写入cookie的解决方法以及一些属性设置,webview怎么设置写入C ...

  3. Android SDK下载失败的解决方法

    Android SDK下载失败的解决方法 图1 在下载过程中,Android SDK Manager Log中出现下面出错信息: Preparing toinstall archives Downlo ...

  4. android studio 更新 Gradle错误解决方法(Gradle sync failed)

    android studio 更新 Gradle错误解决方法   Android Studio每次更新版本都会更新Gradle这个插件,但由于长城的问题每次更新都是失败,又是停止在Refreshing ...

  5. 【java】Execption的 e.getMessage()为null的解决方法

    ================================ 场景: 当代码出现异常时通常都需要将异常信息写入到日志中,异常信息越详细越有利于问题的排查.而通过的Exception.getMess ...

  6. [原创]HierarchyView的实现原理和Android设备无法使用HierarchyView的解决方法

    最近在看一个老外写的东西,发现里面有个类,使用这个类可以让任何设备使用HierarchyView. 众所周知,市面上卖的Android设备,一般都不能使用HierarchyView,所以借此机会,了解 ...

  7. HierarchyView的实现原理和Android设备无法使用HierarchyView的解决方法

    声明:由于本人一直用eng版的真机调试,所以此方法没有用过,记录在这里,有机会验证 ---------------------------------------------------------- ...

  8. Android 内存泄漏分析与解决方法

    在分析Android内存泄漏之前,先了解一下JAVA的一些知识 1. JAVA中的对象的创建 使用new指令生成对象时,堆内存将会为此开辟一份空间存放该对象 垃圾回收器回收非存活的对象,并释放对应的内 ...

  9. windows无法停用“Android Composite Interface”设备的解决方法

    遇到这个问题时,解决方法如下: 打开设备管理器 -> 进程 -> 找到 adb.exe -> 右击选择结束进程 -> 然后重新弹出Android设备

随机推荐

  1. 【14】redux 之 redux-actions

    redux-actions有两大法宝createAction和handleActions. createAction http://www.jianshu.com/p/6ba5cd795077 原来创 ...

  2. 在类中写reponse语句

    原文发布时间为:2009-06-18 -- 来源于本人的百度文章 [由搬家工具导入] 在类文件中不能直接使用response.write,需要使用 System.Web.HttpContext.Cur ...

  3. updatepanel的使用【他人经验+原创 完整例子】

    原文发布时间为:2009-05-16 -- 来源于本人的百度文章 [由搬家工具导入] 刚上传的代码,不知道能不能下载:[源码包含所有ajax控件的简单使用] http://www.xmaspx.com ...

  4. JS - caller,callee,call,apply [transfer] aA ==> apply uses an array [] as the second argument. call uses different argument.

    在提到上述的概念之前,首先想说说javascript中函数的隐含参数:arguments Arguments : 该对象代表正在执行的函数和调用它的函数的参数. [function.]argument ...

  5. mysql中文乱码的解决方法

    MySQL的字符集支持(Character Set Support)有两个方面: 字符集(Character set)和排序方式(Collation).对于字符集的支持细化到四个层次: 服务器(ser ...

  6. Glide图片加载回调

    1.方法一:设置图片中监听 使用的是SimpleTarget类,他继承自BaseTarget,需要重写onResourceReady方法,onResourceReady方法表示加载完成后的回调,下面列 ...

  7. sql_mode引发的数据库问题

    前几天,在本地做完项目,测试完毕后,上传到线上服务器的时候,在做很多写入数据库的操作时,发现全部发生500报错,返回的报错信息是,某个字段没有默认值,写入的时候没有添加这个字段,该字段在数据表中是NO ...

  8. Java IO 学习(三)缓冲IO / 直接IO / 内存映射

    缓冲IO 在介绍缓冲IO之前需要先了解一下常用的机械硬盘的原理与特点 一个机械硬盘中装有多个盘片 每个盘片上有多个同心圆(磁道) 每个同心圆又由多个弧(扇区)组成,每个弧上都记录了等量的数据(比方说5 ...

  9. Codeforces 746G(构造)

                                                                                                      G. ...

  10. Java编程经验汇总

    JDK和JRE 大家肯定在安装JDK的时候会有选择是否安装单独的jre,一般都会一起安装,我也建议大家这样做.因为这样更能帮助大家弄清楚它们的区别: Jre 是java runtime environ ...