getActionBar()返回为空 空指针错误 Caused by: java.lang.NullPointerException
添加返回按钮时候,报错,如图:
Avtivity中代码:
应用停止:
报错提示:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.setDisplayHomeAsUpEnabled(boolean)' on a null object reference
原因
如果没有使用NoActionBar的样式(theme),则可能是由于当前Activity继承自AppCompatActivity。
getActionBar是Activity中的方法。
getActionBar
Added in API level 11
ActionBar getActionBar ()
Retrieve a reference to this activity's ActionBar.
Returns
ActionBar The Activity's ActionBar, or null if it does not have one.
重构AppCompat,在新的AppCompat中,加入主题色,Toolbar等功能。
在新版本中推荐使用AppCompatActivity代替ActionBarActivity。在14年的Android5.0的时候就用Toolbar替代了ActionBar,而ActionBarActivity又被AppCompatActivity替代,所以目前最新的方式是让Activity继承自AppCompatActivity,并使用ToolBar,虽然它的用法更复杂
而AppCompatActivity来自于android.support.v7支持库.android.support.v7.AppCompatActivity
google提供了Android Support Library package 系列的包来保证来高版本sdk开发的向下兼容性,即我们用4.x开发时,在1.6等版本上,可以使用高版本的有些特性,如Fragement,ViewPager等
v7 支持库:一些库旨在与 Android 2.3(API 级别 9)及更高版本搭配使用。这些库提供了特定的功能集,并且可以单独添加到应用中,与其他库互不影响。
注:此库依赖于 v4 支持库。
其中:
getSupportActionBar()
Support library version of getActionBar().
getSupportActionBar()提供原有 getActionBar()的功能
解决方法:
首先查看你的AndroidMainiFest中theme正常,不是诸如NoActionBar的样式
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
其次
查看你的Activity的类型,如果继承自AppCompatActivity,则需要使用getSupportActionBar()
public class NumbersActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.word_list);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
}