【问题标题】:Actionbar scherlock is not refreshed when the orientation is changed更改方向时不刷新操作栏 scherlock
【发布时间】:2012-09-07 17:36:25
【问题描述】:

我在我的应用程序中使用 Sherlock 操作栏。我在菜单中使用了“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();

【问题讨论】:

    标签: android android-actionbar actionbarsherlock


    【解决方案1】:

    ActionBarSherlock 不支持处理配置更改。

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

    Android 文档也不鼓励处理配置更改。不惜一切代价避免使用它们,尤其是在使用 ActionBarSherlock 时。

    在相关说明中,我仍在尝试为库的未来版本解决此问题,但现在建议避免使用。

    【讨论】:

    • 我的 onDestroy 方法中有一些代码,但我刚刚添加了 ABS,它现在在您旋转时调用 onDestroy。您认为我最好的选择是将代码移到后退按钮的处理程序中吗?谢谢
    • 欢迎你重写onDestroy,只要你记得调用超类方法。
    • 我忘了提到我之前没有破坏轮换活动。所以我把代码移到了 onBackPressed 方法。
    【解决方案2】:

    我认为您将不得不在配置更改时重新创建 ActionBar 菜单

    invalidateOptionsMenu();
    

    【讨论】:

    • 感谢您的回答,我在配置更改中尝试了您的功能,但没有成功。你还有什么想法吗?
    • 我唯一的其他建议是尝试 supportInvalidateOptionsMenu();
    • 谢谢你,tony,但它仍然没有任何效果。不知道,问题出在哪里
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多