Android) ViewPager2 정리

성승모·2024년 7월 22일
0

개요

  • 스와이프할 수 있는 형태로 view 또는 fragment를 표시한다.
  • ViewPager를 대체하여 나옴.

dependency)

implementation("androidx.viewpager2:viewpager2:$version")

요약

  • Nested Type
//선택된 페이지가 바꼈을때 콜백되는 인터페이스
abstract class ViewPager2.OnPageChangeCallback

//현 페이지가 스크롤될때 콜백되는 인터페이스
interface ViewPager2.PageTransformer
  • Public constructors
ViewPager2(context: Context)
ViewPager2(context: Context, attrs: AttributeSet?)
ViewPager2(context: Context, attrs: AttributeSet?, defStyleAttr: Int)
@RequiresApi(value = 21)
ViewPager2(
    context: Context,
    attrs: AttributeSet?	//컴파일된 xml 파일에서 데이터를 효율적으로 가져올 수 있게 하는 인터페이스
    defStyleAttr: Int,		// 현 테마가 참조하는 스타일 리소스 속성
    defStyleRes: Int		// 뷰의 기본 스타일를 참조하는 속성
)
  • Public functions
//해당 viewpager에 ItemDecoration을 추가
fun addItemDecoration(decor: RecyclerView.ItemDecoration)
fun addItemDecoration(decor: RecyclerView.ItemDecoration, index: Int)

//페이크 드래그 시작 및 종료
fun beginFakeDrag(): Boolean
fun endFakeDrag(): Boolean
//해당 픽셀로 드래그
fun fakeDragBy(offsetPxFloat: @Px Float): Boolean
//페이크 드래그 중인가?
fun isFakeDragging(): Boolean

// 수평, 수직으로 스크롤할 수 있는가?
fun canScrollHorizontally(direction: Int): Boolean
fun canScrollVertically(direction: Int): Boolean

// RecyclerView.Adpter의 setter, getter
fun setAdapter(adapter: RecyclerView.Adapter?)
fun getAdapter(): RecyclerView.Adapter?

// 현 페이지 index 반환. 비었거나 adapter가 set되지 않았으면 0 반환 
fun getCurrentItem(): Int

// Decoration 중 index에 있는 아이템 반환
fun getItemDecorationAt(index: Int): RecyclerView.ItemDecoration
// Decoration의 총 개수
fun getItemDecorationCount(): Int
//Decoration 아이템 제거
fun removeItemDecoration(decor: RecyclerView.ItemDecoration): Unit
fun removeItemDecorationAt(index: Int)

// 현 페이지의 양쪽 페이지들을 몇개까지 메모리에 올릴지 정함.
//ex) limit=2 면 총 5개의 페이지가 메모리에 올라와있음.
fun setOffscreenPageLimit(limit: Int)
fun getOffscreenPageLimit(): Int

// ViewPager의 orientation을 set
fun setOrientation(orientation: Int): Unit
fun getOrientation(): Int

// ViewPager의 현 스크롤 상태를 반환
// SCROLL_STATE_IDLE, SCROLL_STATE_DRAGGING, SCROLL_STATE_SETTLING
fun getScrollState(): Int

//모든 item들을 무효화하고 requestLayout을 호출한다.
fun invalidateItemDecorations()

// 스크롤 기능의 활성화 여부 결정
fun setUserInputEnabled(enabled: Boolean)
fun isUserInputEnabled(): Boolean

// 페이지가 바뀔때마다 호출되는 콜백 인터페이스 세팅
fun registerOnPageChangeCallback(callback: ViewPager2.OnPageChangeCallback)

// PageTransformer 인터페이스를 세팅
fun setPageTransformer(transformer: ViewPager2.PageTransformer?)
// PageTransformer 호출
fun requestTransform()

// 선택된 item을 설정. 즉 page 이동이 가능
fun setCurrentItem(item: Int)
fun setCurrentItem(item: Int, smoothScroll: Boolean)

사용 순서

  1. FragmentStateAdapter를 Implement할 Class 생성
    • fragment 리스트 넘겨주기
  2. 추상 메소드 정의 -> getItemCount
    • 넘겨받은 fragment 리스트의 size 프로퍼티 이용
  3. 바인딩된 viewpager2 뷰의 adpter에 해당 클래스 생성 후 할당
    • ex) binding.viewpager.adpter = adapter
profile
안녕하세요!

0개의 댓글