当屏幕方向改变时,Actionbar Sherlock 没有被刷新

5

我在我的应用程序中使用Sherlock ActionBar。我在菜单中使用了“ifRoom|withText”功能。如果我在纵向模式下测试我的代码,我只能看到图标,如果我旋转方向到横向,仍然只能看到图标。另一方面,如果我在横向运行,我可以在纵向和横向上看到文本和图标。这意味着屏幕旋转时,操作栏没有刷新。我该如何修复?

在菜单中,我有:

    android:showAsAction="ifRoom|withText"

我在清单文件中使用了这行代码来修复。
    android:configChanges="keyboardHidden|orientation|screenSize"

但是它没有起作用。我在Android 2.3上运行我的代码。

此外,我在我的活动中使用了片段。

        FragmentManager fm = getSupportFragmentManager();
    ft = fm.beginTransaction();

    mFragment1 = fm.findFragmentByTag("f1");

    if (mFragment1 == null) {

        mFragment1 = new MenuFragment();
        ft.add(mFragment1, "f1");

    }

    ft.commit();
2个回答

6

ActionBarSherlock不支持处理配置更改。

在ICS之前,ActionBarSherlock不像本地操作栏一样是装饰视图的一部分,因此受到与您的内容视图相同的限制。通过处理配置更改,您不允许库适应更改,因此会看到错误的显示或某些部分。

安卓文档也不鼓励处理配置更改。尽可能避免它们,特别是在使用ActionBarSherlock时。

相关说明,我仍在尝试解决这个问题,以用于未来版本的库,但目前建议避免使用。


我有一些代码一直放在我的onDestroy方法中,但我刚刚添加了ABS,现在在旋转时会调用onDestroy。你认为最好的办法是将该代码移动到后退按钮的处理程序中吗?谢谢。 - Matt
只要记得调用超类方法,您可以随意重写 onDestroy - Jake Wharton
我忘了提到之前在旋转时没有销毁活动。所以我将代码移到了onBackPressed方法中。 - Matt

0

我认为你需要在配置更改时重新创建ActionBar菜单

invalidateOptionsMenu();

谢谢您的回答,我在配置更改中尝试了您的函数,但它没有起作用。您还有其他想法吗? - SavasCinar
我的另一个建议是尝试使用supportInvalidateOptionsMenu();。 - Tony
谢谢你,Tony,但是它仍然没有任何效果。我不知道问题出在哪里。 - SavasCinar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接