1

背景

我有一个类似的场景,如关于片段的 android 网站示例所示(链接在这里):

  • 小屏幕,纵向:单窗格
  • 小屏幕,横向:单窗格
  • 7" 平板电脑,纵向:单窗格
  • 7" 平板电脑,横向:双窗格,宽
  • 10" 平板电脑,纵向:双窗格,窄
  • 10" 平板电脑,横向:双窗格,宽
  • 电视,横向:双窗格,宽

在我的案例中,操作栏始终显示,现在我只有操作项。

问题

下一个场景非常奇怪:

  • 设备有一个纵向窗格和两个横向窗格。

  • 我的两个片段都创建了自己的操作栏项目。

  • 从纵向切换到横向显示所有操作项(这是我想要的)

  • 从横向切换到纵向显示所有操作项。

    这没有多大意义,因为右窗格不存在,但由于某种原因,它的片段似乎存在于片段管理器中,并且它的 onCreateOptionsMenu 被调用,即使它根本没有显示。

我试过的

我试图在包含两个片段的活动上调用 invalidateOptionsMenu() ,但它没有帮助

我还为每个片段添加了下一个代码,它运行良好:

@Override
public void onStart() {
    super.onStart();
    setHasOptionsMenu(true);
}

@Override
public void onStop() {
    super.onStop();
    setHasOptionsMenu(false);
}

问题

为什么会这样?

我启用/禁用 optionsMenu 的解决方案(从而启用/禁用片段创建的操作栏项目)是一个可行的解决方案吗?有更好的解决方案吗?

让片段首先处理操作项甚至是一件好事吗?

4

2 回答 2

0

在单窗格案例中,我通常只有片段处理操作栏项目。从逻辑上讲,可见片段此时拥有所有屏幕空间,并且由于屏幕空间有限,因此使用操作栏是有意义的。在双窗格的情况下,我倾向于将每个片段的 UI 保留在其自己的片段中,并且不使用操作栏。但是,如果它在您的场景中具有视觉意义,我看不出您有任何不能这样做的理由。

我的理解是在配置更改之前存在的一组片段在配置更改之后重新创建。Android 不依赖 Activity 的布局文件或类似的东西。您创建的任何片段都被认为是要在配置更改中保留的状态。当您的活动被拆除时,您可以尝试手动删除可能不必要的片段,然后依靠 Android 从布局中重新创建它,如果它需要存在的话。然而,这是受过教育的思考,未经测试。

也就是说,我认为您当前的解决方案没有任何问题。

于 2013-03-20T16:39:50.950 回答
0

您可以在onPrepareOptionsMenu(..)右侧片段的方法中,通过查看Configuration可获取的 from来适当地隐藏和显示菜单项getResources().getConfiguration()

正如另一个答案所说,在运行时更改显示的片段数量通常是不可取的——我的应用程序曾经这样做,但我遇到了数千个问题。

于 2013-03-20T16:42:01.820 回答