为错误的片段调用OnCreateOptionsMenu

时间:2013-12-14 19:59:20

标签: java android android-fragments android-viewpager

我有2个片段的SherlockFragmentActivity和ViewPager在它们之间滑动(除了ActionBar)。

每个SherlockFragment都有自己的菜单,如下所示:

public class MyFragment1 extends SherlockFragment {
    private Menu menu;
    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        setHasOptionsMenu(true);
    }
//...
    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        inflater.inflate(R.menu.fr1, menu);
        super.onCreateOptionsMenu(menu, inflater);
        this.menu = menu;
    }
//...
}

其他片段类看起来很相似。

您知道,ViewPager在首次启动活动时会实例化两个片段。因此,首先执行第一个片段的OnCreateView(),然后是第一个片段的OnCreateOptionsMenu(),然后是第二个片段的OnCreateView(),然后是第一个片段的OnCreateOptionsMenu()!“ / p>

请帮助,我需要了解我做错了什么。

1 个答案:

答案 0 :(得分:0)

检查viewpager是否由SherlockFragmentActivity托管,以确保我可以进行该演员和随后的调用:)

public void onPageSelected(int position) {
    ...
    if (context instanceof SherlockFragmentActivity)
        ((SherlockFragmentActivity)context).supportInvalidateOptionsMenu();
}

你需要像这样在onCreateOptionsMenu上下文中启动通货膨胀:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    Fragment f = get your current Fragment
    if (f != null && f instanceof SherlockFragment)
            ((SherlockFragment)f).onCreateOptionsMenu(menu, getSupportMenuInflater());
    return super.onCreateOptionsMenu(menu);
}