第一次在 ViewPager 中加载时出现黑色片段

Black Fragment when loaded the first time in ViewPager

我有一个 FragmentActivity,它在视图寻呼机中加载 3 个片段。在每次全新安装时,都会加载第二个片段,但很快就会变黑。在此之后,第二个片段被重新加载并且即使在浏览视图时也能正常工作。因此,它仅在第一次加载时变黑。我使用 FragmentPagerAdapter 和 FragmentStatePagerAdapter 实现了这个,但它的行为是一样的。这只发生在 KitKat 和 Lollipop 上。所有片段都有简单的布局,没有嵌套片段。

    public class IntroActivity extends FragmentActivity {
        private List<Fragment> listFragments;
        private PagerAdapter pagerAdapterWelcome;
        private OnboardingPager viewPager;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.intro_pager);
            viewPager = (OnboardingPager) findViewById(R.id.viewPager);
            //Initializing the List
            listFragments = new ArrayList<Fragment>();
            //initializing the fragments
            WelcomeFragment welcomeFragment = new WelcomeFragment();
            TicketScanFragment ticketOptionScanFragment = new TicketScanFragment();
            ScannerFragment scanFragment = new ScannerFragment();

            //Adding Fragments to List
            listFragments.add(welcomeFragment);
            listFragments.add(ticketOptionScanFragment);
            listFragments.add(scanFragment);

            //initializing PagerAdapter
            pagerAdapterWelcome = new PagerAdapter(getSupportFragmentManager(), listFragments);
            viewPager.setAdapter(pagerAdapterWelcome);

            final TabLayout tabLayout = (TabLayout) findViewById(R.id.tabDots);
            tabLayout.setupWithViewPager(viewPager, true);
    }

适配器:

public class PagerAdapter extends FragmentStatePagerAdapter {

            private List<Fragment> listFragments;


            public PagerAdapter(FragmentManager fm, List<Fragment> listFragments) {
                super(fm);
                this.listFragments = listFragments;
            }

            @Override
            public Fragment getItem(int i) {
                return listFragments.get(i);
            }

            @Override
            public int getCount() {
                return listFragments.size();
            }
    }

希望这对您的情况有所帮助:您可以尝试对实例化视图寻呼机适配器的方式进行以下更改:

//initializing PagerAdapter
pagerAdapterWelcome = new PagerAdapter(getChildFragmentManager(), listFragments);

这里是文档link:documentation nested fragments

问题出在实例化 SurfaceView 的第三个片段。似乎 ViewPager 默认情况下会销毁并创建屏幕外的视图。所以为了阻止这个,我在我的 FragmentActivity

中添加了
viewPager.setOffscreenPageLimit(listFragments.size());

以此指定不可破坏的视图数。在添加这个之前,ViewPager 的子级数量总是比一页小,现在我明白了为什么,SurfaceView 总是因为它在屏幕之外而被销毁。终于不黑了screen/flicker.