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

时间:2014-10-18 00:41:07

标签: android nullpointerexception android-appcompat

在我将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。

4 个答案:

答案 0 :(得分:85)

您需要致电getSupportActionBar() on an ActionBarActivity。不要拨打getActionBar() - 这在旧设备上不可用,而对于appcompat-v7的新r21版本,我希望它会一直返回null,因为新{ {1}}禁用并替换系统操作栏。

答案 1 :(得分:10)

如果您的活动是AppCompatActivity,您可以获得如下操作栏:

android.support.v7.app.ActionBar mActionBar = getSupportActionBar();

答案 2 :(得分:2)

Object actionBar = getSupportActionBar();

android.support.v7.internal.app.WindowDecorActionBar bar = (android.support.v7.internal.app.WindowDecorActionBar) actionBar;

如果您正在开发针对21SDK的应用,但app会在较旧的sdk下使用,那么上面的这一行就是解决方案。

当您的活动延伸ActionBarActivity时,您无法在21SDK下使用getActionBar()

答案 3 :(得分:0)

在所有代码中用android.support.v7.app.ActionBar替换ActionBar。并使用setSupportActionBar()从AppCompatActivity扩展您的活动。使用android支持v7依赖。