Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ActionBarActivity getSupportActionBar().hide()引发NullPointerException_Java_Android_Nullpointerexception_Android Support Library_Android Actionbar Compat - Fatal编程技术网

Java ActionBarActivity getSupportActionBar().hide()引发NullPointerException

Java ActionBarActivity getSupportActionBar().hide()引发NullPointerException,java,android,nullpointerexception,android-support-library,android-actionbar-compat,Java,Android,Nullpointerexception,Android Support Library,Android Actionbar Compat,召唤 或者只是: if (getSupportActionBar() != null) getSupportActionBar().hide(); 在android.support.v7.app.ActionBarActivity中,我遇到这样的异常: getActionBar() 编辑: 只有当活动具有主题时才会发生: ... java.lang.NullPointerException at android.support.v7.app.ActionB

召唤

或者只是:

 if (getSupportActionBar() != null)
     getSupportActionBar().hide();
在android.support.v7.app.ActionBarActivity中,我遇到这样的异常:

getActionBar()
编辑: 只有当活动具有主题时才会发生:

    ...
    java.lang.NullPointerException
    at android.support.v7.app.ActionBarImplICS.hide(ActionBarImplICS.java:302)
    at android.support.v7.app.ActionBarImplJB.hide(ActionBarImplJB.java:20)
    ...

对于ICS前和ICS后,不要返回null具有
主题。AppCompat.Light
肯定会导致问题。执行此操作的方法是在以下位置设置
MyTheme

  • values/styles.xml
    。这将扩展自
    Theme.AppCompat.Light
    。例如:
  • values-v11/styles.xml
    。这将从一个
    Holo
    主题扩展而来。例如:
  • 通过这种方式,Android知道基于运行时设备主机API加载什么样的主题

    ActionBarActivity
    扩展后,不要调用
    getActionBar()。在post ICS设备上,这将运行,但对于API较低的设备,您将获得运行时
    不支持的方法
    异常或类似的方法。

    据我所知

    getSupportActionBar()
    
    这是不对的! 因为
    getSupportActionBar()
    返回的实例不为空 ()

    之后,我们可以调用hide函数(
    getSupportActionBar().hide();

    但是在这个函数中,我们将有NullPointerException,因为变量
    mActionBar
    在函数内部 android.support.v7.app.ActionBarImplICS实例==null

    据我所知,android.support.v7.app.ActionBarImplICS的内部构造函数

    if (getSupportActionBar() != null)
         getSupportActionBar().hide();
    
    返回null,因为我们的活动没有通过主题的ActionBar

     mActionBar = activity.getActionBar();
    
    
    真的
    假的
    
    遇到同样的问题,但我使用下面的代码来设置全屏和noActionbar,而不是xml中的主题:

    <style name="MyTheme" parent="Theme.AppCompat.Light">
            <item name="android:windowNoTitle">true</item>
            <item name="android:windowFullscreen">false</item>
        </style>
    
    此代码在ICS之前运行良好,但由于ICS上方的NullPointException导致崩溃,经过一些实验,我得到了解决方案:删除一行代码,其中没有设置标题如下:

    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        getSupportActionBar().hide();
        setContentView(R.layout.page_welcome);
        initViews();
    }
    
    然后,它在所有平台上都能正常工作。:)

    简而言之:
    true
    只能与
    活动
    一起使用,不能与
    操作活动

    另一方面,
    getSupportActionBar().hide()
    
    可以与
    ActionBarActivity

    一起使用。你能发布整个课程吗?你在
    AppTheme
    中有什么?此问题仅在ICS之后的设备上重现,而在ICS之前的设备上可能不会出现?AppTheme=Theme.AppCompat.Light。我已经回答了这个问题。我也认为这是ICS的错误。更新的答案,以反映ICS的情况。在第一个例子中,我没有注意到NPE是从哪里来的。@Abi-:你找到问题所在了吗?正如你在代码片段
    getSupportActionBar()
    中看到的,不要返回null,否则在android.support.v7.app.ActionBarImplICS类中NullPointerException不在第302行,但你对主题的猜测是正确的,只有当:
    style name=“MyTheme”parent=“AppTheme”>true时才会发生这种情况
    
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        getSupportActionBar().hide();
        setContentView(R.layout.page_welcome);
        initViews();
    }
    
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        // requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        getSupportActionBar().hide();
        setContentView(R.layout.page_welcome);
        initViews();
    }