2

我有一個活動,顯示一個月的日曆,並允許用戶左右滑動前一個/下一個月。我想使用ViewPager來獲得平滑的滾動效果,但它應該允許用戶無限滾動左/右,因此無法事先設置固定的適配器。如何使用ViewPager回收視圖?

我想知道是否可以回收這樣的網頁:最初適配器設置爲僅包含3頁,並顯示在中間頁,

  • 當用戶刷卡離開,回收的第3頁,在當前頁面之前創建一個新頁面,設置新適配器,並將索引設置爲1(中)。
  • 當用戶向右滑動時,回收第1頁以在當前頁面之後創建新頁面,設置新適配器並將索引設置爲1(中)。

我可以用setAdapter()和setCurrentIndex()來做到這一點嗎?這會造成不必要的後果嗎?

+0

看看我的示例代碼這會讓你viewpager掛了很多,不會有平滑滾動可言! – Antrromet 2014-12-13 16:06:07

+0

@Antrromet那麼你的建議是什麼? – NeoWang 2014-12-13 16:12:39

+1

看看[FragmentStatePagerAdapter](http://developer.android.com/reference/android/support/v4/app/FragmentStatePagerAdapter.html) – mpkuth 2014-12-13 19:58:25

回答

1

在其他支持ViewPager循環並提高性能的應用程序中,應該使用View而不是Fragment。基本上這是instantiateItem你正在尋找。

@Override 
public Object instantiateItem(ViewGroup parent, int position) { 
    int viewType = getItemViewType(position); 
    if (!mRecycleCacheMap.containsKey(viewType)) { 
    mRecycleCacheMap.put(viewType, new RecycleCache(this, parent, viewType)); 
    } 
    ViewHolder viewHolder = mRecycleCacheMap.get(viewType).getFreeViewHolder(); 
    viewHolder.mIsAttached = true; 
    onBindViewHolder((VH) viewHolder, position); 
    parent.addView(viewHolder.mItemView); 
    if (DEBUG) { 
    Log.i(TAG, String.format(Locale.US, "instantiateItem | position: %d | viewType: %d | cacheCount: %d", 
     position, viewType, mRecycleCacheMap.get(viewType).mCaches.size())); 
    } 
    return viewHolder; 
} 

這裏RecyclerPagerAdapter

+0

Nice,@HenryTao,爲什麼需要getItemCount方法? – htafoya 2016-11-30 02:33:16