【问题标题】:Handling Action Bars with two fragments处理带有两个片段的操作栏
【发布时间】:2012-04-10 21:18:33
【问题描述】:

我有一个包含两个片段的布局,两个片段都有自己的操作栏,每个都有自己的操作项和菜单。当我的应用程序处于横向模式并且两个片段都显示在屏幕上时,看起来框架正在选择在“右侧”(或第二个片段)显示操作栏,这意味着左侧的片段(第一个片段) 缺少其操作项和菜单选项。

当应用程序处于纵向模式时一切正常,所以我不确定我是否应该做一些事情来处理同时显示的片段。谢谢。

编辑

在我的每个片段中,我都使用此代码将菜单项添加到操作栏:

在片段 1 中:

    @Override
    public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) {
        inflater.inflate(R.menu.fragment_menu_1, menu);
        super.onCreateOptionsMenu(menu, inflater);
    }

在片段 2 中:

    @Override
    public void onCreateOptionsMenu(final Menu menu, final MenuInflater inflater) {
        inflater.inflate(R.menu.fragment_menu_2, menu);
        super.onCreateOptionsMenu(menu, inflater);
    }

更新:

显然使用setRetainInstance(true) 是导致菜单不刷新的原因。我之所以使用它,是因为我有一个 AsyncTask,如果设备旋转,它会引发异常。所以我修复了一个问题,但解决了另一个问题。

【问题讨论】:

标签: android android-layout android-fragments actionbarsherlock


【解决方案1】:

我认为您对此的想法不正确。操作栏不显示为任何片段的一部分,但实际上是活动的一部分。如果您在片段中声明您通过setHasOptionsMenu(true) 提供操作项,则所有内容都将显示为操作栏的一部分。然后,您可以通过覆盖 onOptionsItemSelected(MenuItem item) 来采取适当的操作。

【讨论】:

  • 查看 OP,我添加了一些代码,但我在 onCreateOptionsMenu 的两个片段中都添加了菜单布局。操作栏不应该显示两个菜单吗?
  • 你都给setHasOptionsMenu(true)打电话了吗?
  • 是的,因为在纵向模式下,当片段在不同的屏幕上时,每个片段的菜单都会正确显示。我还应该注意,我正在使用 ActionBarSherlock,不确定这是否会有所不同。
  • 我从未使用过 ActionBarSherlock,但我所描述的是使用 android.app.Activity 时它应该如何工作。我知道它有效,因为我就是这样做的:)。
  • 所以你有两个片段,每个片段都有自己的菜单选项,当两个片段都显示在屏幕上时,每个片段的菜单选项合并为一个?知道我应该看到什么可能有助于我调试这个问题。
猜你喜欢
  • 2015-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-20
  • 2017-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多