6

我正在使用 ActionBarSherlock,并且正在尝试使用 viewpager 实现嵌套的片段结构。

我有一个包含一些视图和包装片段(片段A)的活动

这个 FragmentA 包含一个显示 FragmentA.1、FragmentA.2、FragmentA.3 的视图寻呼机。

默认情况下,onCreateOptionsMenu 事件不会被分派到子片段,正如这里所讨论的那样。所以我正在使用这个解决方案来克服这个问题。

它在 API 级别 17 上运行良好,但在下面它没有显示第一个片段的选项菜单,但是当我滚动到其他片段时,一切都开始正常工作。我尝试从父片段调用 onCreateOptionsMenu 但没有结果。当我滚动回第一个片段时它也有效。

有什么建议么?

更新 :

更清晰的结构表达方式:

通过包装片段,我的意思是保存 viewpager 的片段。所以结构是

ACTIVITY 
        -> WRAPPER FRAGMENT (holds viewpager and passes childfragmentmanager to adapter(FragmentPagerAdapter) as fragmentmanager) (parent is activity)
             -> CHILDFRAGMENTS(items of viewpager) (parent is wrapper fragment but viewpager manages its framelayout)

我还找到了一个不太好的临时解决方案:

if(Build.VERSION.SDK_INT > 17){

            pager.setCurrentItem(1,false);

        } else {

            new android.os.Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    pager.setCurrentItem(1, true);
                }
            }, 300);


        }
4

2 回答 2

3

您可能在活动创建结束之前初始化您的视图寻呼机。
这是问题所在,因为子片段创建了他们的选项菜单,但随后,活动使所有选项菜单无效。
您必须在onActivityCreated包装片段的方法内初始化寻呼机。

于 2014-05-09T08:57:33.617 回答
1

编辑

if(viewPagerAdapter.getItem(view_pager.getCurrentItem()) instanceof FragmentToFind)
{
    FragmentToFind fragment = (FragmentToFind) viewPagerAdapter.getItem(view_pager.getCurrentItem());

    fragment.onCreateOptionsMenu(menu, inflater);
}
于 2013-11-25T10:03:47.373 回答