2017-04-18 147 views
1

我正在开发一个android项目。我发现viewpager和碎片的一个奇怪的行为。一旦viewpager中的多个片段被加载,一些片段根本不会显示任何内容一段时间,通常超过10秒。之后,内容再次正确显示。Android Fragment不显示任何内容

以下是我有:

它的UI采用的是MainActivity只包含一个viewpager mMainPager。

private void setupViewPager() { 
     mMainPageAdapter = new MainPageAdapter(getSupportFragmentManager()); 
     mMainPager.setAdapter(mMainPageAdapter); 
     mMainPager.addOnPageChangeListener(this); 
     mMainPager.setOnSwipeOutListener(this); 
    } 

MainPageAdapter在MainActivity中定义如下。它有4个片段:

private class MainPageAdapter extends FragmentStatePagerAdapter { 

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

    @Override 
    public int getCount() { 
     return NUMBER_OF_PAGES; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     switch (position) { 
      case 0: 
       return Fragment0.newInstance(); 
      case 1: 
       return Fragment1.newInstance(); 
      case 2: 
       return Fragment2.newInstance(); 
      default: 
       return Fragment3.newInstace(); 
     } 
    } 

    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 
    } 
} 

Fragment3有一个viewpager嵌套在里面。该viewpager包含4个片段。

ChatsViewPager pagerChats; 

适配器使用com.ogaclejapan.smarttablayout.utils.v4

FragmentStatePagerItemAdapter adapterSegChat = new FragmentStatePagerItemAdapter(getChildFragmentManager(), FragmentPagerItems.with(getActivity()) 
      .add(getString(R.string.string0), Fragment30.class) 
      .add(getString(R.string.string1), Fragment31.class) 
      .add(getString(R.string.string2), Fragment32.class) 
      .add(getString(R.string.string3), Fragment33.class) 
      .create()); 


    pagerChats.setAdapter(adapterSegChat); 

一旦MainActivity启动后,片段2显示。如果用户滑动到Fragment3,则pagerChats中的所有四个片段都可以正确显示。轻扫可以在这4个片段之间平滑过渡。

但是,一旦用户滑动到Fragment0和Fragment1,然后又回到Fragment3,则两个四个片段中的pagerChats中的Fragment32和Fragment33不再显示。没有错误,没有冻结。他们只是显示一个空白屏幕。

用户等待超过10秒后,显示Fragment32和Fragment33的内容。

如果用户重复上述过程,同样的事情会再次发生。

这是使用三星S7,运行API 24.

为什么它是这样的?是否由于内存限制?

+1

这解决了我的问题。谢谢。 – windchime

+0

很高兴为您效劳!非常感谢,并很快“回来”! – statosdotcom

回答