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

时间:2017-02-03 14:13:45

标签: android android-fragments android-viewpager surfaceview

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

doctrine_mongodb:
    # ...
    connections:
        default:
            server: "mongodb://mongodb-01:27017,mongodb-02:27017,mongodb-03:27017"

适配器:

    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);
    }

2 个答案:

答案 0 :(得分:1)

问题是实例化SurfaceView的第三个片段。看起来ViewPager默认会破坏并创建不在屏幕外的视图。所以为了阻止这个,我在FragmentActivity中添加了

viewPager.setOffscreenPageLimit(listFragments.size());

指定了不可破坏的视图的数量。在添加之前,ViewPager的子节点数总是小一页,现在我明白了为什么,SurfaceView总是被破坏,因为它在屏幕之外。最后,不再有黑屏/闪烁。

答案 1 :(得分:0)

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

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

此处有文档链接:documentation nested fragments