简体   繁体   English

Android-ViewPager内的片段内的片段问题

[英]Android - Fragment inside a Fragment inside a ViewPager problems

In my application I have a View pager that rotates 4 Fragments. 在我的应用程序中,我有一个View分页器,它可以旋转4个片段。 Some of those fragments have other fragments inside them. 这些片段中的一些内部还有其他片段。 The first time Viewpager starts a Fragment it works fine, but if I rotate around and return to the previous fragment, the inner fragments fail to show ( and I have noticed that getActivity() in them returns null). Viewpager第一次启动Fragment时,它工作正常,但是如果我旋转并返回到上一个片段,则内部片段将无法显示(并且我注意到其中的getActivity()返回null)。

For example, the app starts, I move through viewpager and see all the main fragments and they appear fine, then I scroll back, every main fragment that has inner fragments does not show properly. 例如,该应用程序启动,我在viewpager中移动,看到所有主要片段,它们看起来都很好,然后我向后滚动,每个包含内部片段的主要片段均无法正确显示。

I use "FragmentStatePagerAdapter" for my ViewPager and the code is below (variables names are for example). 我为ViewPager使用“ FragmentStatePagerAdapter”,代码如下(例如,变量名称)。

private class ContentPagerAdapter extends FragmentStatePagerAdapter { 私有类ContentPagerAdapter扩展FragmentStatePagerAdapter {

    public ContentPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Parcelable saveState() {
        return null;
    }

    @Override
    public Fragment getItem(int pos) {

        Fragment fragment = null;
        try {
            if (pos == POS1) {
                if (fragment1 == null) {
                    fragment1 = Fragment1.newInstance();
                }
                fragment = fragment1;
            } else if (pos == POS2) {
                if (fragment2 == null) {
                    fragment2 = Fragment2.newInstance(something);
                }
                fragment = fragment2;
            } else if (pos == POS3) {
                if ( fragment3 == null ) {
                    fragment3 = Fragment3.newInstance(something3);
                }
                fragment = fragment3;
            } else { //default
                if (fragment4 == null) {
                    fragment4 = Fragment4.newInstance(something4);
                }
                fragment = fragment4;
            }
        }catch (Exception e) {
            Log.e(AppConstants.APP_TAG, "Cannot create fragment", e);
            finish();
        }

        return fragment;
    }

    @Override
    public int getCount() {
        int count = 4;
        return count;
    }

    @Override
    public int getItemPosition(Object object) {
        return POSITION_NONE;
    }
}

When instantiating the PagerAdapter , use getChildFragmentManager() instead of getFragmentManager() . 实例化PagerAdapter ,请使用getChildFragmentManager()而不是getFragmentManager() If more info needed, similiar problem was solved here ViewPager in TabFragment not loading second time 如果需要更多信息,类似的问题已在此处解决, TabFragment中的ViewPager不会第二次加载

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM