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

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

除了Action bar之外,所有似乎都很好的工作。

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

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

//fragment specific menu creation }

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

这在刷卡完成后稍后更改操作栏时看起来很糟糕。 如何在刷卡开始之前立即重新创建操作栏?


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

在接近你改变片段的地方做这件事,试着减少片段和动作条变化之间的“滞后”。

编辑

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

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

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


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

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


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

我如何动态更改动作栏动作?

链接地址: http://www.djcxy.com/p/63913.html

上一篇: Android: How to recreate Action bar when fragment changed

下一篇: Understanding Fragment's setRetainInstance(boolean)