2017-04-18 153 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

回答