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
主题扩展而来。例如:
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();
}