2012-08-16 20 views
2

我有一個使用代碼的工作viewpager示例,我從教程中獲得。本教程由Lauren Darcey和Shane Conder編寫,他們顯然是專家(我是Android的新手)。代碼粘貼在下面。這段代碼正在做的是在用戶水平滑動時膨脹(提前)和破壞(後面)。只有5頁。看起來,將它們全部膨脹然後讓用戶在沒有通貨膨脹/破壞的情況下進行所有的刷卡會更聰明。就像它是一個寬大的頁面(例如Windows Phone 7中的Panarama和Pivot控件)。此外,如果其中一個網頁上有谷歌地圖,此代碼就會發作。它打擊了第二次通貨膨脹(不知道爲什麼),如果他們只是一次充氣,這種情況就不會發生。使用viewpager的最佳方式

有沒有必要這樣做的原因?有沒有任何例子可以按照我的建議進行操作? 謝謝, 加里·布萊克利

private class MyPagerAdapter extends PagerAdapter { 

    public int getCount() { 
     return 5; 
    } 

    public Object instantiateItem(View collection, int position) { 

     LayoutInflater inflater = (LayoutInflater) collection.getContext() 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     int resId = 0; 
     switch (position) { 
     case 0: 
      resId = R.layout.farleft; 
      break; 
     case 1: 
      resId = R.layout.left; 
      break; 
     case 2: 
      resId = R.layout.middle; 
      break; 
     case 3: 
      resId = R.layout.right; 
      break; 
     case 4: 
      resId = R.layout.farright; 
      break; 
     } 

     View view = inflater.inflate(resId, null); 

     ((ViewPager) collection).addView(view, 0); 

     return view; 
    } 

    @Override 
    public void destroyItem(View arg0, int arg1, Object arg2) { 
     ((ViewPager) arg0).removeView((View) arg2); 

    } 

回答

8

您可以使用ViewPager.setOffscreenPageLimit(int)加載所有屏幕外的標籤。只需通過執行((ViewPager) collection).setOffscreenPageLimit(4);((ViewPager) collection).setOffscreenPageLimit(getCount() - 1);將其設置爲4(即總計5個,減1可見)。

請記住這一點的內存影響;如果你不小心,將所有加載的東西都放在設備的內存中。

+0

Eric,那麼工作得很好!它每頁膨脹一次,滾動快速而平穩。之後,instantiateItem再也不會被調用。謝謝。 – 2012-08-17 17:58:41

+5

「只需將其設置爲4(總共5個,減1可見)」是不正確的。如果數字設置爲4,則頁面足夠多時將加載9頁,因爲ViewPager將在當前頁面的任一側保留4頁。請參閱文檔http://developer.android.com/reference/android/support/v4/view/ViewPager.html#setOffscreenPageLimit \(int \) – 2012-11-16 10:59:40

+2

@Leoguo是的,它是正確的。總共只有5頁。加載9沒有意義;沒有9頁要加載。相反,操作系統會將所有ViewPager的頁面加載到內存中,除非當前頁面(只要您更改頁面就存儲),這樣就不會重新創建它們。 – Eric 2012-11-16 16:51:46