18

我需要在我的一个针对 Gingerbread 的 android 应用程序中使用操作栏和片段的组合。所以我使用了 v7 支持库中的操作栏和 v4 支持库中的片段,并使用 FragmentActivity 扩展了我的类。

当我输入该行时出现错误

actionbar = getSupportActionBar();

错误指出getSupportActionBar() 未为 myFragmentClass 类型(我的类名)定义。该代码在没有支持库的情况下完美运行。我的问题有解决方案吗?

谢谢!

4

7 回答 7

44

在 OnAttach() 方法中编写此代码:

actionBar = ((ActionBarActivity) getActivity()).getSupportActionBar();

不推荐使用 ActionBarActivity。采用

actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();

于 2013-10-22T13:47:31.547 回答
19

您必须扩展 ActionBarActivity 而不是 FragmentActivity 才能拥有带有片段的 Actionbar。

如果您使用的是 v7 appcompat 库,则您的 Activity 应改为扩展 ActionBarActivity,它是 FragmentActivity 的子类(有关更多信息,请阅读添加操作栏)。

您可以在下面给出的页面上找到更多信息。上面的行取自下面的页面(最后一段)。 http://developer.android.com/training/basics/fragments/creating.html

编辑-这不是错误。它只是缺乏知识。有时基本都不清楚。我目前也在从android网站上学习,这就是我给你答案的方式。

于 2014-03-30T17:44:28.957 回答
8

我也尝试过使用:

actionbar = getActivity().getSupportActionBar();

直到我这样做才起作用:

ActionBar actionBar = ((ActionBarActivity)getActivity()).getSupportActionBar();

所以当我投射到我的 MainActivity 时它起作用了。

于 2014-07-01T12:49:26.380 回答
8

对于android.support.v7

ActionBar actionBar =  ((AppCompatActivity) getActivity()).getSupportActionBar();

//than next for example 
actionBar.setDisplayHomeAsUpEnabled(true);
于 2015-09-02T13:26:20.847 回答
1

要在 Fragment 中调用 ActionBar,请使用以下命令:

actionbar = getActivity().getSupportActionBar();

Fragment 没有 ActionBar,只有 Activity。这就是为什么你必须这样称呼它。

于 2013-09-27T13:56:41.947 回答
0

我已经通过扩展 ActionBarActivity 并在 AndroidManifest.xml 中进行了一些更改来尝试它

 <activity android:name="yourActionbarActivity" 

android:theme="@style/Theme.AppCompat.Light">

它对我来说很好用

于 2014-09-08T08:59:07.957 回答
-3

无需在任何地方进行任何更改,只需使用 getActionBar().setTitle(title)而不是getSupportActionBar在使用时使用FragmentActivity. 它对我来说很好。

于 2015-08-17T21:10:51.100 回答