getActionBar()返回Null(AppCompat-v7 21)

在将AppCompat-v7更改为21.0.0和编译没有任何问题之后,我的应用崩溃了。

它给了我错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.setIcon(int)' on a null object reference 

在这一行上:

 getActionBar().setIcon(R.drawable.ic_action_bar); 

它适用于AppCompat-v7 20.0.0,但不适用于21.0.0。

您需要在ActionBarActivity上调用getSupportActionBar() 。 不要调用getActionBar() – 这在旧设备上不可用,对于新的r21版本的appcompat-v7 ,我希望它始终返回null ,因为新的ActionBarActivity会禁用并replace系统操作栏。

如果您的活动是AppCompatActivity,则可以像这样获取操作栏:

 android.support.v7.app.ActionBar mActionBar = getSupportActionBar(); 
 Object actionBar = getSupportActionBar(); android.support.v7.internal.app.WindowDecorActionBar bar = (android.support.v7.internal.app.WindowDecorActionBar) actionBar; 

如果你正在开发面向21SDK的应用程序,但应用程序将在旧的SDK下使用,那么上面这行是解决scheme。

当您的活动扩展ActionBarActivity时,不能在21SDK下使用getActionBar()

在你所有的代码中,用android.support.v7.app.ActionBarreplaceActionBar。 并使用setSupportActionBar()也从AppCompatActivity范围的活动。 使用android支持v7依赖。