Android 将ViewPager setOffscreenPageLimit用作getChildFragmentManager的NestedFragment时不工作
我正在尝试做类似的事情。我甚至使用相同的布局: 我之所以采用这种方法,是因为我使用的是NavigationView(每个选项都是一个片段),其中第一个选项是带有选项卡的片段(因此是一个包含更多片段的ViewPager) 我在使用时发现一个问题:Android 将ViewPager setOffscreenPageLimit用作getChildFragmentManager的NestedFragment时不工作,android,android-fragments,android-viewpager,android-nested-fragment,Android,Android Fragments,Android Viewpager,Android Nested Fragment,我正在尝试做类似的事情。我甚至使用相同的布局: 我之所以采用这种方法,是因为我使用的是NavigationView(每个选项都是一个片段),其中第一个选项是带有选项卡的片段(因此是一个包含更多片段的ViewPager) 我在使用时发现一个问题: viewPager.setAdapter(新的AdapterView(getChildFragmentManager()) 基本上,使用ViewPager作为嵌套片段,它只加载1个页面(从3个选项卡),当我滑动到其他页面时,它只加载其他页面(每个选项卡
viewPager.setAdapter(新的AdapterView(getChildFragmentManager())代码>
基本上,使用ViewPager作为嵌套片段,它只加载1个页面(从3个选项卡),当我滑动到其他页面时,它只加载其他页面(每个选项卡都是一个带有ContentLoader的片段)。我发现在这种情况下,使用setOffscreenPageLimit
会被忽略。相反,如果我使用:
getActivity().getSupportFragmentManager()
然后ViewPager按预期工作(默认情况下加载1页以及下一页和上一页)。但是随后,很多奇怪的事情发生了(因为我假设在使用嵌套片段时使用getChildFragmentManager
)。所以有没有想过使用ViewPager作为嵌套片段并使setOffscreenPageLimit
正常工作
编辑1(15年12月30日)
在跟踪bug的过程中,我检查了所有片段是否都已创建。问题是这三个片段拥有自己的LoaderCallback
,但只有第一个片段调用onLoadFinished
。试图弄清楚为什么其他片段在导航到它时只调用onLoadFinished
(在没有嵌套方法的情况下工作)。我遇到了同样的问题。我就是这样做的,这对我来说很有效,它的架构和你期望的一样
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
view = inflater.inflate(R.layout.communitylayout, container, false);
Bundle data = getArguments();
TabLayout tabLayout = (TabLayout) view.findViewById(R.id.comtabs);
tabLayout.setTabMode(TabLayout.MODE_FIXED);
// add tabs
tabLayout.addTab(tabLayout.newTab());
tabLayout.addTab(tabLayout.newTab());
tabLayout.addTab(tabLayout.newTab());
RelativeLayout layout1 = (RelativeLayout) inflater.inflate(R.layout.communitytablayoutleft, container, false);
RelativeLayout layout2 = (RelativeLayout) inflater.inflate(R.layout.communitytablayout, container, false);
RelativeLayout layout3 = (RelativeLayout) inflater.inflate(R.layout.communitytablayoutright, container, false);
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
pager = (ViewPager) view.findViewById(R.id.compager);
CommunityPagerFragment adapter = new CommunityPagerFragment(getChildFragmentManager());
pager.setAdapter(adapter);
tabLayout.setupWithViewPager(pager);
pager.setCurrentItem(0);
tabLayout.setOnTabSelectedListener(this);
// KEEP FRAGMENT STATE INSIDE OF THE TAB
pager.setOffscreenPageLimit(2);
((TextView)layout1.findViewById(R.id.tabtext)).setText(tabs[0]);
((TextView)layout2.findViewById(R.id.tabtext)).setText(tabs[1]);
((TextView)layout3.findViewById(R.id.tabtext)).setText(tabs[2]);
//tabLayout.set
tabLayout.getTabAt(0).setCustomView(layout1);
tabLayout.getTabAt(1).setCustomView(layout2);
tabLayout.getTabAt(2).setCustomView(layout3);
onTabSelected(tabLayout.getTabAt(1));
//tabLayout.set
return view;
如果您想通过单击和滑动使选项卡正常工作,请添加以下内容:
@Override
public void onTabSelected(TabLayout.Tab tab) {
pager.setCurrentItem(tab.getPosition());
}
嗯,那么你只是建议不要在这种情况下使用嵌套片段?我有3个片段,其中我发送了一个包,根据这些参数,它们使用ContentLoader加载一些内容。我不确定你的解决方案在这里是否有用。我想我不会使用嵌套片段,将ViewPager放置在主活动中,并根据所选选项隐藏/显示它:/