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

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

当我输入该行时出现错误

actionbar = getSupportActionBar();

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

谢谢!

【问题讨论】:

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

标签: android android-actionbar fragment


【解决方案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 以下的设备。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多