2012-07-25 59 views
19

有沒有辦法繞過ViewPager及其屏幕外頁面限制的正常行爲? 我的ViewPager包含四個fragments,每個包含一個gridview的圖像。我遇到的問題是在ViewPager的實例化過程中,創建了兩個fragments,這導致大約20個圖像(每個片段大約10個)同時從捕獲中下載/獲取。是否可以禁用屏幕外頁面限制?ViewPager屏幕外頁面限制

我的目標是僅在選擇fragment時才下載圖像,或者僅在用戶懸停圖像時下載圖像。一種方法是使用onPageSelected監聽器並設置一個標誌,告訴GridViewAdapter是否允許下載圖像。

,我能想到的第二個方法是設置在ImageView一個HoverListener,只有下載的onHover的圖像,但聽者只在4.0及更高版本。

有沒有更好的方法來實現這一目標?

回答

32

是否有可能禁用屏幕外頁數限制?

不是。它已被設置爲最小可能值:查看頁面的每一側有一頁。這對於使動畫效果起作用是必要的 - 您可以同時看到兩個片段(原始和新的)的部分。

我的目標是僅在選擇片段時或僅在用戶懸停圖像時下載圖像。

然後用佔位符圖像加載您的網格,並且在頁面更改之前不加載實際圖像。

此外,請注意「懸停」意味着某種鼠標或類似的指針,這在大多數Android設備上都沒有使用。

+0

我已經將offscreen設置爲1,但是屏幕上剩餘的片段是在第一次創建時的谷歌支持地圖片段,當我回到地圖出現並覆蓋我的片段,任何想法爲什麼? – 2014-02-04 21:40:13

+0

@IgnacioGarat:屏幕外的限制與此無關。聽起來像某些東西不能正確處理你的'PagerAdapter'。 – CommonsWare 2014-02-04 21:45:20

26

只需將屏幕外限制設置爲1即可。

ViewPager mViewpager = (ViewPager)findView.... 
mViewPager.setOffscreenPageLimit(1); 
+37

這已經默認設置的片段。 – Wayne 2012-07-31 03:35:45

+0

我試過這個,它不工作 – rahul 2014-12-18 13:48:57

2

手柄viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener()

它裏面,刪除多餘的視圖中使用viewPager.removeViewAt(int)(即position + 1position - 1之前限制尋呼機已加載只有3頁:當前,過去和未來

那麼你應該處理destroyItem在viewpager適配器,recycle()荷蘭國際集團的位圖中被毀壞的視圖。

@Override 
public void destroyItem(ViewGroup container, int position, Object object) { 
    LinearLayout layout = (LinearLayout) object; 
    ((ViewPager) container).removeView(layout); 
    ImageView imgDisplay = (ImageView) layout.findViewById(R.id.quranPage); 
    Drawable drawable = imgDisplay.getDrawable(); 
    if (drawable instanceof BitmapDrawable) { 
     BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable; 
     Bitmap bitmap = bitmapDrawable.getBitmap(); 
     if (bitmap != null) //when reading page fails, this will be null 
      bitmap.recycle(); 
    } 
} 
2

我的目標是隻下載圖像時選擇

片段可以使用setUserVisibleHint(boolean isVisibleToUser)回調的片段在你的ViewPager。

3

您也可以使用Android數據綁定爲此在XML:

<android.support.v4.view.ViewPager 
    [...] 
    app:offscreenPageLimit="@{1}" 
    [...] 
</android.support.v4.view.ViewPager> 
0

mViewPager.setOffscreenPageLimit(1);不會給你想要的東西,它會加載鄰居片段如果尚未加載(這意味着它會加載2片段)。假如你想一次加載你所有的片段(4片段),那麼只能使用setOffscreenPageLimit(3),否則應避免使用setOffscreenPageLimit

我認爲你不能改變viewpager加載鄰居片段的默認行爲。

0

爲了避免下載圖像,而無需用戶實際滾動到可以覆蓋「setUserVisibilityHint(布爾visibleToUser)」並加載你的圖片,僅當「visibleToUser」變成真正的