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