【问题标题】:Android actionbar refresh when rotating and multi-pane旋转和多窗格时Android操作栏刷新
【发布时间】:2012-11-07 11:54:22
【问题描述】:

我有一个与下图相同的活动:

FragmentA 是一个列表视图,并有一个 SearchWidget 作为菜单项(旧设备上不显示,仅 API11 及更高版本)。 FragmentB 是一个详细视图,有几个菜单项。

当 ActivityA 在平板电脑上运行时,FragmentA + FragmentB 的菜单项在操作栏中可见。这是正确的,而且效果很好。

现在在 Nexus 7 上,我想要混合使用这些:

  • 在纵向仅使用手机布局
  • 当我旋转设备时,会加载平板电脑布局

我似乎无法正常工作的是操作栏。当我将设备从横向模式(平板电脑视图)旋转回纵向(手机视图)时,操作栏仍然显示 FragmentA + FragmentB 的菜单项。

我尝试在两个 ActivityA 中将 invalidateOptionsMenu()onResume() 调用为 FragmentA,但没有运气。

有人有想法吗?

【问题讨论】:

    标签: android android-fragments android-actionbar actionbarsherlock


    【解决方案1】:

    我认为这是应有的活动再创造过程。

    当屏幕旋转时,您的 Activity 将被销毁(默认情况下)。 但在它被销毁之前,它会保存状态,包括所有当前活动片段的状态。 稍后,当活动在方向更改后创建时,它会恢复保存的状态(两个片段)。随着详细信息片段的恢复,它会附加菜单项。

    您可以通过在onCreateView of DetailsFragment 中添加日志语句或使用调试器来检查这一点。

    如果是你的情况,那么你有下一个解决方案:

    1. 通过在 Activity 保存其状态之前删除此 Fragment 来抑制保存状态(如果 DetailsFragment 应跟踪最后显示的项目或类似内容,则必须避免)。
    2. 如果 DetailsFragment 不显示,则禁止对其进行任何初始化。活动应该给出关于可见性的答案。
    3. 你的变种?我认为上述两种方法还不够好......

    对不起,如果我的回答对你没有帮助

    【讨论】:

      【解决方案2】:

      这对我有用。 在 Activity A 中尝试找到 Fragment B 并设置 setHasOptionsMenu(mTwoPane)

      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
      
          setContentView(R.layout.activity_document_list);
      
          Fragment fragment = getFragmentManager().findFragmentByTag(TAG_FRAGMENT_DETAIL);
      
          if (getResources().getBoolean(R.bool.has_detail)){
              mTwoPane = true;
      
              ....
      
          }
      
          if (fragment != null) {
              fragment.setHasOptionsMenu(mTwoPane);
              invalidateOptionsMenu();
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多