ActionBar(支持)和 Fragment(支持)

Posted

技术标签:

【中文标题】ActionBar(支持)和 Fragment(支持)【英文标题】:ActionBar (Support) with Fragment (support) 【发布时间】:2013-10-03 20:26:45 【问题描述】:

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

当我输入该行时出现错误

actionbar = getSupportActionBar();

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

谢谢!

【问题讨论】:

您是否导入了正确的库? android.support.v7.app.ActionBar 我做到了。我也让操作栏正常工作。当我尝试包含片段时出现问题。 【参考方案1】:

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

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

ActionBarActivity 已弃用。使用

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

【讨论】:

感谢您的回答。下次会试试。从那以后我就开始使用操作栏了.. 这对我有帮助..!谢谢。 ActionBarActivity 已弃用。请改用((AppCompatActivity) getActivity()).getSupportActionBar();【参考方案2】:

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

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

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

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

【讨论】:

是的,几天后我通过扩展 ActionBarActivity 让它工作了。刚刚忘记更新我的帖子了。感谢您的回答!【参考方案3】:

我也尝试过使用:

actionbar = getActivity().getSupportActionBar();

在我这样做之前它没有工作:

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

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

【讨论】:

不要使用这个方法,因为片段被设计成可以在多个活动中重用,如果你在“MainActivity”之外的不同活动中使用片段,它会崩溃。 Bhr 对超类 ActionBarActivity 的回答是正确的。 正确。那时我还没有这些知识。【参考方案4】:

对于 android.support.v7

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

//than next for example 
actionBar.setDisplayHomeAsUpEnabled(true);

【讨论】:

【参考方案5】:

要在 Fragment 中调用 ActionBar,请使用:

actionbar = getActivity().getSupportActionBar();

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

【讨论】:

我无法在 eclipse 中获取 getActivity() 选项 这与eclipse无关。请务必在 Fragment 中调用此行。 类的方法getActivity()未定义:这是我添加代码时遇到的错误。 这一定是一个错误,不是吗?我已经尝试了 2 天了!【参考方案6】:

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

 <activity android:name="yourActionbarActivity" 

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

它对我来说很好用

【讨论】:

【参考方案7】:

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

【讨论】:

它不适用于所有设备。您需要 getSupportActionBar() 来支持 API 11 以下的设备。

以上是关于ActionBar(支持)和 Fragment(支持)的主要内容,如果未能解决你的问题,请参考以下文章

在 Fragment 中向 ActionBar 添加项目

Android Fragment使用 Toolbar使用及Fragment中的Toolbar处理

Android tab导航的几种方法:ActionBar tab +fragment,Viewpager+pagerTitleStrip,开源框架ViewPageIndicator 和 ViewPag

Android Toolbar使用及Fragment中的Toolbar处理

从 Fragment 设置自定义 ActionBar 标题

ActionBar 菜单项在嵌套片段中消失