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

45

我将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个回答

87
你需要在一个ActionBarActivity上调用getSupportActionBar()。 不要调用getActionBar()——这在旧设备上不可用,并且对于appcompat-v7的新r21版本,我希望它始终返回null,因为新的ActionBarActivity禁用并替换了系统操作栏。

除此之外,您必须确保工具栏已添加到我们的布局,并且正在调用 setSupportActionBar(yourToolBar) - Ankit
我的ActionBarActivity中没有getSupportActionBar。 - Roel
@DalvikVM:应该有的是:http://developer.android.com/reference/android/support/v7/app/ActionBarActivity.html#getSupportActionBar%28%29 - CommonsWare
@CommonsWare:抱歉我的错误。我正在查看一个片段,在该片段中我添加了自己的getActionbar(),它返回了this.getActivity().getActionBar()。请注意,当您想从片段中访问它时,您必须将getActivity()强制转换为ActionBarActivity - Roel
1
这将是一个更完整的答案:((AppCompatActivity) getActivity()).getSupportActionBar().setIcon(R.drawable.ic_action_bar); - Adrian Wreyford

11

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

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

2
Object actionBar = getSupportActionBar();

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

如果你正在开发针对21SDK的应用程序,但该应用程序将在旧的sdk下使用,则上面的这些行是解决方案。

当你的活动扩展ActionBarActivity时,在21SDK下无法使用getActionBar()。


0

在所有的代码中用 android.support.v7.app.ActionBar 代替 ActionBar,并使用 setSupportActionBar()。同时,将您的活动从 AppCompatActivity 中扩展。使用 Android support v7 依赖项。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接