ActionItem 在屏幕旋转时丢失

Posted

技术标签:

【中文标题】ActionItem 在屏幕旋转时丢失【英文标题】:ActionItem lost on screen rotation 【发布时间】:2012-04-03 12:46:47 【问题描述】:

我使用了一个 sherlockfragmentactivity,它有一个 ViewPager、两个 Fragment 和一个显示两个选项卡的 ActionBar。我从片段中填充操作项,但我必须调用方法

    setHasOptionsMenu(true);

为了比片段显示Actionbar MenuItem。 但是当屏幕方向改变时,MenuItems 不会显示出来。

这是我在第一个片段中创建选项菜单的代码:

public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) 
    super.onCreateOptionsMenu(menu, inflater);
    menu.add(R.string.action_refresh).setIcon(R.drawable.ic_menu_refresh)
            .setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() 

                public boolean onMenuItemClick(MenuItem item) 
                    refresh();
                    return false;
                
            ).setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM);
    menu.add(R.string.action_add_a_file).setIcon(R.drawable.ic_menu_upload)
            .setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM);
    menu.add(R.string.action_settings).setIcon(android.R.drawable.ic_menu_preferences)
            .setIntent(new Intent(getSherlockActivity(), SettingsActivity.class))
            .setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_NEVER | MenuItem.SHOW_AS_ACTION_WITH_TEXT);


有没有办法从 SherlockFragment 正确地将项目添加到操作栏中,以及如何在屏幕方向更改后将这些项目保留在操作栏中?

【问题讨论】:

我不知道这是否是最好的解决方案,但由于我有一个已知的固定数量的片段,我在我的 SherlockActivity 的onCreate 方法中实例化它们并在实例化后调用:invalidateOptionsMenu();然后在我的片段的onActivityCreated 方法中,在我必须在那里做的事情之后,我调用setHasOptionsMenu(true);。因此,即使在屏幕定向之后,我的 ActionItem 也会为每个片段显示。 【参考方案1】:

在清单文件的 FragmentActivity 中添加以下行 android:configChanges="orientation"

方向由系统本身自动处理。但我不知道天气这是否是一种有效的方式。

【讨论】:

使用android:configChanges="orientation" 是not recommended

以上是关于ActionItem 在屏幕旋转时丢失的主要内容,如果未能解决你的问题,请参考以下文章

在不丢失数据的情况下处理屏幕旋转 - Android

应用程序不会填满设备屏幕,启动屏幕也不会自动旋转

我的手机开启了屏幕旋转但是玩王者荣耀的时候还是不能旋转屏幕其他游戏也试过都不行

UIToolbar 在屏幕顶部时无法正确旋转

屏幕旋转不同步时旋转 UIView

旋转相机时 DirectX 基元不会在屏幕上移动