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(支持)的主要内容,如果未能解决你的问题,请参考以下文章
Android Fragment使用 Toolbar使用及Fragment中的Toolbar处理
Android tab导航的几种方法:ActionBar tab +fragment,Viewpager+pagerTitleStrip,开源框架ViewPageIndicator 和 ViewPag