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依赖。