24

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

除了操作栏外,一切似乎都很好。

我在片段中覆盖 onCreateOptionsMenu() 方法,为任何片段创建单独的操作栏:

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

//fragment specific menu creation }

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

在滑动完成后一段时间内更改操作栏时,这看起来很糟糕。如何在开始滑动之前立即重新创建操作栏?

4

4 回答 4

26

您可以通过调用要求 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

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

于 2013-01-23T13:14:15.713 回答
4

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

显示没有任何动作的片段 setHasOptionsMenu(false)

于 2013-05-18T08:16:49.263 回答
2

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

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

于 2014-08-31T15:43:47.070 回答
1

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

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

我最终在滑动开始时清除操作栏菜单和标题(您可以在 PageView 中设置特殊侦听器)并在滑动完成和显示新片段时再次设置菜单和标题。

In 有一些时间延迟,并且在滑动过程中操作栏看起来很空,但这是你能做的最好的事情。
Android API 是...

于 2013-01-27T10:17:12.830 回答