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操作栏?

  • 将操作栏方向改为从右到左
  • 操作栏不显示与AppCompat
  • 如何强制操作栏溢出图标显示
  • 如何检测SearchView是否扩展?
  • Android:自定义操作栏,如何使用整个宽度?
  • Android和ActionBarCompat:如何在pre-ICS设备上更改运行时操作的可见性?
  • 带有checkbox的Gmail类ListView(以及使用ActionBar)
  • 同时显示选项卡栏和listIn Actionbar。 (Android Honeycomb)
  • 你可以通过调用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是…