Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:当片段发生变化时如何重新创建操作栏_Android_Android Actionbar_Swipe - Fatal编程技术网

Android:当片段发生变化时如何重新创建操作栏

Android:当片段发生变化时如何重新创建操作栏,android,android-actionbar,swipe,Android,Android Actionbar,Swipe,我有一个活动显示了一些片段。 活动视图仅包含使用自定义FragmentPagerAdapter初始化的ViewPager。 此适配器提供3个片段之间的导航 除了动作条外,其他一切似乎都很好 我在片段中重写onCreateOptionsMenu()方法,为任何片段创建单独的操作栏: @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateO

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

除了动作条外,其他一切似乎都很好

我在片段中重写onCreateOptionsMenu()方法,为任何片段创建单独的操作栏: @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); menu.clear();

        //fragment specific menu creation
    }
当我刷的时候,新的片段出现了,但动作栏保持了几秒钟不变。可能几秒钟后,调用此方法并更改操作栏

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

您可以通过调用
invalidateOptionsMenu(),要求android在自动创建actionbar之前重新创建它

在靠近更改片段的位置执行此操作,以尝试减少片段和操作栏更改之间的“延迟”

编辑

完整的解决方案可能如下所示:

class activity extends Activity{

private void switchFragment(){

...do fragment changing stuff

activity.invalidateOptionsMenu();

}

}

class someFragment extends Fragment{

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


    //fragment specific menu creation
}

}
在测试过程中打开的碎片

activity.invalidateOptionsMenu();
然后将其称为

 onCreateOptionsMenu

您可以在那里创建特定于片段的菜单

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

最好是让actionbar成为片段的一部分,而不是活动,但这是不可能的

当滑动开始时,我会清除actionbar菜单和标题(您可以在PageView中设置特殊侦听器),当滑动完成并显示新片段时,会再次设置菜单和标题

在中,会有一些时间延迟,在滑动过程中actionbar看起来出奇地空,但这是您所能做的最好的。

Android API是c..

可以通过在每个片段的onAttach回调中实现onCreateOptions菜单并调用setHasOptions菜单(true)并相应地更改操作来完成


要显示不包含任何操作的片段,请选择SetHasOptions菜单(false)

如果您使用的是ActionBar选项卡,请查看以下答案:


问题是我找不到任何明显的方法要求android重新创建actionbar。@Mik我已经更新了答案以提供帮助,但我真的不完全理解您的意思。。。InvalidateOptions菜单()应该“要求android重新创建actionbar”谢谢你的回答,但是1。当您调用.invalidateOptions菜单()时;系统并没有真正重新创建动作栏。它只会导致在片段中调用onCreateOptionsMenu(),从而允许您更改菜单(它是actionbar的一部分)。如果在片段中调用了setHasOptions菜单(true),那么您甚至不必调用InvalidateOptions菜单(),因为OnCreateOptions菜单()是自动调用的。2.在刷卡之前,我找不到调用OnCreateOptions菜单()的方法。感谢您提及
onAttach
SethasOptions菜单