如何使用ViewPager回收视图?

时间:2014-12-13 15:58:21

标签: android android-viewpager android-adapter android-adapterview

我的活动显示了一个月的日历,并允许用户左右滑动到上个月/下个月。我想使用ViewPager进行平滑的滚动效果,但它应该允许用户无限地向左/向右滚动,因此无法预先设置固定的适配器。

我想知道是否可以像这样回收页面:最初将适配器设置为仅包含3页,并显示中间页,

  • 当用户向左滑动时,回收第3页以在当前页面之前创建新页面,设置新适配器,并将索引设置为1(中间)。
  • 当用户向右滑动时,回收第一页以在当前页面之后创建新页面,设置新适配器,并将索引设置为1(中间)。

我可以使用setAdapter()和setCurrentIndex()吗?这会造成不良后果吗?

1 个答案:

答案 0 :(得分: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