Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.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 setOffscreenPageLimit用作getChildFragmentManager的NestedFragment时不工作_Android_Android Fragments_Android Viewpager_Android Nested Fragment - Fatal编程技术网

Android 将ViewPager setOffscreenPageLimit用作getChildFragmentManager的NestedFragment时不工作

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个选项卡),当我滑动到其他页面时,它只加载其他页面(每个选项卡

我正在尝试做类似的事情。我甚至使用相同的布局:

我之所以采用这种方法,是因为我使用的是NavigationView(每个选项都是一个片段),其中第一个选项是带有选项卡的片段(因此是一个包含更多片段的ViewPager)

我在使用时发现一个问题:

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放置在主活动中,并根据所选选项隐藏/显示它:/