Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 选项ViewPager中嵌套片段的菜单_Android_Android Fragments_Actionbarsherlock_Android Viewpager_Fragment - Fatal编程技术网

Android 选项ViewPager中嵌套片段的菜单

Android 选项ViewPager中嵌套片段的菜单,android,android-fragments,actionbarsherlock,android-viewpager,fragment,Android,Android Fragments,Actionbarsherlock,Android Viewpager,Fragment,我正在使用ActionBarSherlock,并尝试使用viewpager实现嵌套片段结构 我有一个活动,其中包含一些视图和包装器fragmet(FragmentA) 此FragmentA包含一个显示FragmentA.1、FragmentA.2和FragmentA.3的视图寻呼机 默认情况下,OnCreateOptions菜单事件不会按原样分派给子片段 讨论。所以我用解决方案来解决这个问题 它在API级别17上工作得很好,但在下面,它没有显示第一个片段的选项菜单,但当我滚动到其他片段时,一切都

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

我有一个活动,其中包含一些视图和包装器fragmet(FragmentA)

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

默认情况下,OnCreateOptions菜单事件不会按原样分派给子片段 讨论。所以我用解决方案来解决这个问题

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

有什么建议吗

更新:

更清晰的结构表达方式:

我所说的包装器片段是指保存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);


        }
编辑


您可能在活动创建结束之前初始化了视图寻呼机。
这是一个问题,因为子片段创建了它们的选项菜单,但是活动会使所有选项菜单无效。

您必须在包装器片段的activitycreated方法中初始化寻呼机。

感谢您的努力,但在OnCreateOptions菜单中调用getChildFragmentManager()时返回null。另外,如何在viewpager中获取当前片段的id?我更改了代码,因为我认为您的问题与片段导航有关。希望有帮助。您正在viewpager项中添加一个片段(片段)。这又增加了一个不必要的片段级别。我已经更新了问题,可能是我没有足够清楚地解释问题。我不知道这是否重要,但保存查看页面的包装器片段应该是
SherlockFragmentActivity
,以承载查看页面和片段。我第一次尝试在查看页面中的项目上使用onCreateOptions菜单时,它的工作原理是这样的:put
sethasOptions菜单(true)。然后,该片段将调用onCreateOptions菜单(),类似于片段中的以下内容:
@Override public void onCreateOptions菜单(菜单菜单,菜单充气器)
如果菜单xml或
super.onCreateOptions菜单(菜单,充气器),则使用充气器如果要以编程方式添加它们
if(viewPagerAdapter.getItem(view_pager.getCurrentItem()) instanceof FragmentToFind)
{
    FragmentToFind fragment = (FragmentToFind) viewPagerAdapter.getItem(view_pager.getCurrentItem());

    fragment.onCreateOptionsMenu(menu, inflater);
}