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

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

所有似乎都行得通,除了Action bar。

我重写我的片段中的onCreateOptionsMenu()方法来创build任何片段的单个操作栏:

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

//fragment specific menu creation }

当我滑动时,出现新的片段,但操作栏保持相同的几秒钟。 可能几秒钟后,这个方法被调用,操作栏被改变。

在刷卡完成后,当操作栏在一段时间内改变时,这看起来相当糟糕。 如何在刷卡开始之前立即重新创build操作栏?

Solutions Collecting From Web of "Android:如何更改片段时重新创build操作栏"

你可以通过调用invalidateOptionsMenu();来让android自动重新创build操作栏invalidateOptionsMenu();

在接近你改变片段的地方做这个尝试,并减less片段和操作栏变化之间的“滞后”。

编辑

一个完整的解决scheme可能如下所示:

 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 

你可以在那里做片段特定的菜单创build

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

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

如果您正在使用ActionBar选项卡,您希望看到这个答案:

如何dynamic更改动作栏动作?

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

最好的做法是将操作栏作为片段的一部分,而不是活动,但这是不可能的。

当滑动开始的时候(你可以在PageView中设置特殊的监听器)并且当刷卡完成并且显示新的片段时再次设置菜单和标题时,我最终清除了操作栏菜单和标题。

在给出一些时间滞后和操作栏看起来奇怪空的滑动,但最好你可以做。
Android API是…