2

저는 한 달 달력을 보여 주며, 사용자가 왼쪽/오른쪽을 이전/다음 달로 쓸어 넘길 수 있습니다. 부드러운 스크롤 효과를 위해 ViewPager를 사용하고 싶지만, 사용자가 왼쪽/오른쪽으로 무한대로 스크롤 할 수 있어야하므로 미리 고정 어댑터를 설정할 방법이 없습니다. 이 같은 페이지를 재활용 할 수 있다면 나는 궁금ViewPager를 사용하여 뷰를 어떻게 재활용 할 수 있습니까?

: 처음에는 단지 3 페이지를 포함하는 어댑터를 설정하고, 중간 페이지를 표시,

사용자 와이프가 왼쪽
  • 에 3 페이지를 재활용 현재 페이지 앞에 새 페이지를 만들고, 새 어댑터를 설정하고, 인덱스를 1 (중간)으로 설정하십시오.
  • 사용자가 오른쪽으로 스 와이프하면 첫 번째 페이지를 재순환하여 현재 페이지 다음에 새 페이지를 만들고 새 어댑터를 설정하고 인덱스를 1 (중간)으로 설정하십시오.

setAdapter() 및 setCurrentIndex()를 사용하여이 작업을 수행 할 수 있습니까? 이로 인해 원치 않는 결과가 발생합니까?

+0

이것은 당신의 viewpager 많이 걸고 전혀 부드러운 스크롤이 없을 것 만들 것입니다! – Antrromet

+0

@Antrromet 그 때 당신의 제안은 무엇입니까? – NeoWang

+1

[FragmentStatePagerAdapter] (http://developer.android.com/reference/android/support/v4/app/FragmentStatePagerAdapter.html) – mpkuth

답변

1

ViewPager의 재활용을 지원하고 성능을 향상 시키려면 조각 대신보기를 사용해야합니다. 기본적으로 이것은 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