Android:如何在片段更改时重新创建操作栏

时间:2013-01-23 12:27:30

标签: android android-actionbar swipe

我有一个显示一些片段的活动。 活动视图仅包含使用自定义FragmentPagerAdapter初始化的ViewPager。 此适配器提供3个片段之间的导航。

除了动作栏之外,似乎一切正常。

我覆盖片段中的onCreateOptionsMenu()方法,为任何片段创建单独的Action栏:

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater)
    {
        super.onCreateOptionsMenu(menu, inflater);
        menu.clear();

//fragment specific menu creation }

当我滑动时,会出现新片段,但操作栏保持不变几秒钟。可能在几秒钟后调用此方法并更改操作栏。

在滑动完成后一段时间内更改操作栏时,这看起来非常糟糕。 如何在滑动开始之前立即重新创建操作栏?

3 个答案:

答案 0 :(得分:4)

可以通过在每个片段的onAttach回调中实现onCreateOptionsMenu并调用setHasOptionsMenu(true)来完成,并相应地更改操作。

显示片段,其中没有任何动作setHasOptionsMenu(false)

答案 1 :(得分:2)

如果您正在使用ActionBar标签,您希望看到以下答案:

How can I change Action Bar actions dynamically?

答案 2 :(得分:1)

最后,我找不到任何合理的方法来实现这一目标。

最好的方法是让动作栏成为片段的一部分,而不是活动,但这是不可能的。

我最终会在滑动开始时清除操作栏菜单和标题(您可以在PageView中设置特殊监听器)并在滑动完成并再次显示新片段时再次设置菜单和标题。

In给出了一些时间延迟,并且在滑动过程中操作栏看起来很奇怪,但是你最好能做到。
Android API是c ...