Android 选项ViewPager中嵌套片段的菜单
我正在使用ActionBarSherlock,并尝试使用viewpager实现嵌套片段结构 我有一个活动,其中包含一些视图和包装器fragmet(FragmentA) 此FragmentA包含一个显示FragmentA.1、FragmentA.2和FragmentA.3的视图寻呼机 默认情况下,OnCreateOptions菜单事件不会按原样分派给子片段 讨论。所以我用解决方案来解决这个问题 它在API级别17上工作得很好,但在下面,它没有显示第一个片段的选项菜单,但当我滚动到其他片段时,一切都开始正常工作。我尝试从父片段调用CreateOptions菜单,但没有结果。当我滚动回第一个片段时,它也会起作用 有什么建议吗 更新: 更清晰的结构表达方式: 我所说的包装器片段是指保存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上工作得很好,但在下面,它没有显示第一个片段的选项菜单,但当我滚动到其他片段时,一切都
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菜单时,它的工作原理是这样的:putsethasOptions菜单(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);
}