0

我有一個PagerAdapter它創建3個片段。 在MainActivity我設置ViewPager這樣的:android - 充氣片段視圖只有當選擇其選項卡

ViewPager pager = (ViewPager) findViewById(R.id.pager); 
    pager.setOffscreenPageLimit(2); 
    pager.setAdapter(new PagerAdapter(getSupportFragmentManager())); 

pager.setOffScreenPageLimit(2)就是從這裏https://stackoverflow.com/a/11852707/1662033,以確保OnViewCreated爲每個片段調用一次。

這裏是我的PagerAdapter類:

public class PagerAdapter extends FragmentPagerAdapter { 

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

    @Override 
    public CharSequence getPageTitle(int position) { 
     switch (position) { 
      case 0: 
       return "Home"; 
      case 1: 
       return "Live"; 
      case 2: 
       return "Gallery"; 
      default: 
       return null; 
     } 
    } 

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

    @Override 
    public Fragment getItem(int position) { 
     switch (position) { 
      case 0: 
       return new HomeFragment(); 
      case 1: 
       return new LiveFragment(); 
      case 2: 
       return new GalleryFragment(); 
      default: 
       return null; 
     } 
    } 
} 

在當前代碼:所有片段的onCreateViewonActivityCreated等被調用一次,一開始就是這樣。

我遇到的問題是 - 其中一個片段(LiveFragment)我有一個自定義視圖,它連接到相機並顯示實時流。

我要的是 - 膨脹的LiveFragment認爲,只有當用戶瀏覽到的片段,而不是如何它了 - 它在與其他片段開始膨脹。

只有在選擇片段時纔有調用onCreateView的方法嗎?

回答

0

FragmentPagerAdapter創建所有片段,並將它們全部存儲在內存中。即所有碎片都只創建一次,您可以在它們周圍導航。

默認情況下,FragmentStatePagerAdapter在任何給定時間創建內存中只有3個碎片(當前碎片以及左側和右側碎片到當前碎片)。你不能減少這個數字。但是,您可以使用viewpager.setOffScreenPageLimit()增加內存中的碎片數量。

由於您只有3個片段,所以您的3個片段都是在Viewpager初始化時創建的。您可以使用viewpager.addOnPageChangeListener()來跟蹤屏幕上當前可見的片段。只有在片段當前可見的情況下,才能使用此功能將LiveFragment的視圖從虛擬視圖更改爲實際視圖。