ViewPager2

스와이프할 수 있는 형식으로 뷰 또는 프래그먼트를 표시합니다.
최근 업데이트 안정화 버전 출시 후보 버전 베타 버전 알파 버전
2024년 5월 14일 1.1.0 - - -

AndroidX 종속 항목

ViewPager2를 사용하려면 프로젝트의 build.gradle 파일에 다음 AndroidX 종속 항목을 추가합니다.

Groovy

dependencies {
    implementation "androidx.viewpager2:viewpager2:1.1.0"
}

Kotlin

dependencies {
    implementation("androidx.viewpager2:viewpager2:1.1.0")
}

의견

제출하신 의견은 Jetpack을 개선하는 데 도움이 됩니다. 새로운 문제를 발견하거나 라이브러리 개선을 위한 아이디어가 있다면 Google에 알려 주세요. 새 문제를 제출하기 전에 이 라이브러리의 기존 문제를 살펴보시기 바랍니다. 별표 버튼을 클릭하여 기존 문제에 투표할 수 있습니다.

새로운 문제 제출하기

자세한 내용은 Issue Tracker 문서를 참고하세요.

버전 1.1.0

버전 1.1.0

2024년 5월 14일

androidx.viewpager2:viewpager2:1.1.0이 출시되었습니다. 버전 1.1.0에 포함된 커밋을 확인하세요.

1.0.0 이후 중요 변경사항

  • RecyclerView 1.3.1-rc01 이상과 함께 사용할 때 발생하는 비정상 종료를 수정합니다.
  • 이제 ViewPager2CollectionInfoCollectionItemInfo를 올바르게 채우며, RecyclerView 1.2.0-alpha02 이상에서는 더 이상 기본적으로 채우지 않습니다.
  • FragmentStateAdapter 내부에서 발생하는 프래그먼트 수명 주기 변경을 수신 대기하기 위한 FragmentTransactionCallback 인터페이스를 추가했습니다.
  • FragmentManager에 프래그먼트를 추가할 때 최초 프래그먼트 메뉴 가시성에서 발생하는 FragmentStateAdapter 문제를 수정했습니다.
  • 창 인셋 전달을 수정했습니다. 이제 모든 페이지에서 동일한 인셋을 가져옵니다. 동위 뷰에서 인셋을 사용할 수 없도록 할 수 있는 이전 API 버전(API 30 미만)에서 WindowInsets가 전달되는 방식으로 인해 API 30 미만 기기에 인셋을 적용하려면 WindowInsetsApplier.install(viewPager2)를 통해 이 수정사항을 선택해야 합니다.

버전 1.1.0-rc01

2024년 5월 1일

androidx.viewpager2:viewpager2:1.1.0-rc01이 1.1.0-beta02 이후 중요한 변경사항 없이 출시되었습니다. 버전 1.1.0-rc01에는 이 커밋이 포함되어 있습니다.

버전 1.1.0-beta02

2023년 5월 24일

androidx.viewpager2:viewpager2:1.1.0-beta02이 출시되었습니다. 버전 1.1.0-beta02에 포함된 커밋을 확인하세요.

API 변경사항

  • FragmentTransactionCallback에 Fragment 상태 저장 콜백을 추가했습니다. 추가했습니다. (I45b90)
  • 이제 ViewPager2는 더 이상 이전 API 버전(30 미만)의 손상된 WindowInsets 전달을 수정하려고 시도하지 않습니다. 수정 자체가 ViewPager2의 형제에 해로울 수 있기 때문입니다. 수정사항은 계속 사용할 수 있지만 개발자가 사례별로 결정할 수 있도록 선택사항이 되었습니다. WindowInsetsApplier.install(viewPager2))를 호출하여 수정사항을 사용 설정합니다. (Ic9a85)

버그 수정

  • 최신 버전의 RecyclerView와의 호환성 문제를 수정했습니다. 이 버전의 ViewPager2 사용자는 RecyclerView 1.3.1-rc01 이상으로 업데이트해야 합니다.

버전 1.1.0-beta01

2021년 8월 4일

androidx.viewpager2:viewpager2:1.1.0-beta01이 출시되었습니다. 버전 1.1.0-beta01에 포함된 커밋을 확인하세요.

API 변경사항

  • Kotlin 1.4를 사용하도록 AndroidX를 업그레이드합니다. (Id6471, b/165307851, b/165300826)

  • 모든 AndroidX 라이브러리에 맞게 자바 8 타겟팅으로 이동합니다. (2923f39)

버그 수정

  • 창 인셋 전달을 수정했습니다. 이제 모든 페이지에서 동일한 인셋을 가져옵니다. (I47fef)

버전 1.1.0-alpha01

2020년 4월 1일

androidx.viewpager2:viewpager2:1.1.0-alpha01가 출시되었습니다. 버전 1.1.0-alpha01에 포함된 커밋을 확인하세요.

이 출시는 RecyclerView 1.2.0-alpha02의 변경사항을 포함하며 RecyclerView에서 더 이상 기본적으로 제공하지 않는 CollectionInfoCollectionItemInfo를 채웁니다. RecyclerView 1.2.0-alpha02로 업데이트하면 접근성 회귀를 방지하기 위해 ViewPager2도 업데이트됩니다.

새로운 기능

  • FragmentStateAdapter 내부에서 발생하는 프래그먼트 수명 주기 변경을 수신 대기하기 위한 FragmentTransactionCallback 인터페이스를 추가했습니다. (Ibda77)

버그 수정

  • FragmentManager에 프래그먼트를 추가할 때 최초 프래그먼트 메뉴 가시성에서 발생하는 FragmentStateAdapter 문제를 수정했습니다. (I9d2ff, b/144442240)

버전 1.0.0

버전 1.0.0

2019년 11월 20일

androidx.viewpager2:viewpager2:1.0.0이 1.0.0-rc01에서 변경사항 없이 출시되었습니다. 버전 1.0.0에 포함된 커밋을 확인하세요.

1.0.0의 주요 기능

  • 이전 ViewPager 구현의 개선사항:
    • RTL(오른쪽에서 왼쪽) 레이아웃 지원
    • 수직 방향 지원
    • 안정적인 Fragment 지원(기본 Fragment 컬렉션 변경사항 처리 포함)
    • 데이터 세트 변경 애니메이션(DiffUtil 지원 포함)
  • 이전 ViewPager 구현에서 쉽게 이전할 수 있습니다(가능하다면 API 패리티). 이전 가이드샘플 앱을 참고하세요.

ViewPager2를 사용하여 프래그먼트 간에 슬라이드하는 방법은 가이드를 참고하세요.

버전 1.0.0-rc01

2019년 10월 23일

androidx.viewpager2:viewpager2:1.0.0-rc011.0.0-beta05 이후 변경사항 없이 출시되었습니다. 버전 1.0.0-rc01에 포함된 커밋을 확인하세요.

버전 1.0.0-beta05

2019년 10월 9일

androidx.viewpager2:viewpager2:1.0.0-beta05가 출시되었습니다. 버전 1.0.0-beta05에 포함된 커밋을 확인하세요.

버그 수정

  • 화면 밖 페이지에서 페이지 변경을 초래하는 requestFocus가 수정되었습니다. 이제 동작이 원래 ViewPager와 일치합니다. (b/140656866)
  • 페이지 변경 후 화면 밖 페이지에 남아 있는 focus가 수정되었습니다. 이제 페이지를 변경할 때 포커스가 해제됩니다. (b/140656866)
  • 페이지 변경 시 Fragment 일시중지/다시 시작 트랜잭션의 순서가 수정되었습니다(이제 새 항목을 다시 시작하기 전에 항상 이전 기본 항목을 일시중지함). (b/139489059)
  • canScrollHorizontally(int)canScrollVertically(int)가 수정되었습니다. 이제 이러한 메서드는 ViewPager2가 지정된 방향으로 스크롤할 수 있는지 여부를 반환합니다. (b/141848404)
  • ViewPager2에서 더 잘 작동하도록 SwipeRefreshLayout의 문제가 수정되었습니다.

버전 1.0.0-beta04

2019년 9월 5일

androidx.viewpager2:viewpager2:1.0.0-beta04이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.

버그 수정

  • Fragment 백 스택 관련 FragmentStateAdapter 에지 케이스(edge case) 문제가 수정되었습니다. (b/139095195)
  • 입력/포커스 시 스크롤/페이지 이동을 초래하는 특정 속성 구성 관련 EditText 문제가 수정되었습니다. (b/138044582, b/139432498)
  • ItemDecoration 인스턴스 관련 문제 및 오버스크롤 표시기 위치 지정 문제가 수정되었습니다. (b/139012032)
  • ViewPager2에서 더 잘 작동하도록 RecyclerView, NestedScrollViewNavigation과 같은 다른 구성요소의 여러 문제가 수정되었습니다.

버전 1.0.0-beta03

2019년 8월 7일

androidx.viewpager2:viewpager2:1.0.0-beta03이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.

버그 수정

  • 일시적인 Fragment 상태와 관련된 FragmentStateAdapter 문제가 수정되었습니다. (b/134246546)
  • 부드럽게 스크롤하는 동안 데이터 세트가 변경될 때 발생하는 currentItemscrollState 문제가 수정되었습니다(에지 케이스가 해결됨). (b/137642608)
  • PageTransformer(MarginPageTransformer 포함) 애니메이션이 데이터 세트 변경 애니메이션과 충돌하는 문제가 수정되었습니다. (b/134658996)
  • 큰 데이터 세트의 부드러운 스크롤 애니메이션 문제가 수정되었습니다(float 정수 값 제한). (b/134858960)

버전 1.0.0-beta02

2019년 7월 19일

androidx.viewpager2:viewpager2:1.0.0-beta02가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.

버그 수정

  • 1.0.0-beta01에 도입된 의도치 않은 jacoco 종속 항목이 삭제되었습니다. (b/137782951)

버전 1.0.0-beta01

2019년 7월 17일

androidx.viewpager2:viewpager2:1.0.0-beta01이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.

버그 수정

  • 데이터 세트를 스크롤하고 업데이트하는 동안 발생하는 ViewPager2.updateCurrentItem 비정상 종료 문제가 수정되었습니다.
  • ViewPager2.isLayoutRtl 관련 NullPointerException 비정상 종료가 수정되었습니다.
  • 이제 TOUCH_SLOP_PAGING이 기본 터치 슬롭입니다.
  • 빈 어댑터의 OnPageChangeCallback 이벤트가 수정되었습니다. ViewPager1과의 패리티를 위해 페이지가 -1이 아닌 0입니다.

알려진 문제

버전 1.0.0-alpha06

2019년 7월 2일

androidx.viewpager2:viewpager2:1.0.0-alpha06이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.

API를 정지하고 베타로 이동하기 전에 이것이 마지막으로 계획된 알파 버전입니다. API 의견을 보내주세요.

새로운 기능

  • 개선된 접근성 기초: ACTION_PAGE_RIGHT, ACTION_PAGE_DOWN

API 변경사항

  • FragmentStateAdapter: 기본 항목이 아닌 FragmentSTARTED에 제한되고 menuVisibility는 false로 설정됩니다.
  • PageTransformer, MarginPageTransformer, CompositePageTransformer: position 문서가 수정되었습니다.

버그 수정

  • 데이터 세트 변경/어댑터 변경 이후의 currentItem이 수정되었습니다.
  • offscreenPageLimit 관련 MarginPageTransformer 문제가 수정되었습니다.
  • FakeDrag 동작 과정의 접근성 작업이 수정되었습니다.

버전 1.0.0-alpha05

2019년 6월 5일

androidx.viewpager2:viewpager2:1.0.0-alpha05가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.

새로운 기능

  • RecyclerView와 일관되게 동작하는 ItemDecorator가 도입되었습니다.
  • 페이지 사이에(페이지 인셋 외부에) 공간을 만드는 기능을 제공하도록 MarginPageTransformer가 도입되었습니다.
  • 여러 PageTransformer를 결합하는 기능을 제공하도록 CompositePageTransformer가 도입되었습니다.

API 변경사항

  • FragmentStateAdapter#getItem 메서드의 이름이 FragmentStateAdapter#createFragment로 변경되었습니다. 이전 메서드 이름은 과거 버그의 원인으로 드러났습니다.
  • OFFSCREEN_PAGE_LIMIT_DEFAULT 값이 0에서 -1로 변경되었습니다. OFFSCREEN_PAGE_LIMIT_DEFAULT 상수를 사용하면 클라이언트 코드를 변경할 필요가 없습니다.

버그 수정

  • 반대 방향으로 드래그하여 SCROLL_STATE_SETTLING이 중단될 때의 getCurrentItem() 동작이 수정되었습니다.
  • '활동 유지 안 함' 컨텍스트에서 FragmentStateAdapter 클래스 로더 문제가 해결되었습니다.
  • setOffscreenPageLimit 문서가 개선되었습니다.

버전 1.0.0-alpha04

2019년 5월 7일

androidx.viewpager2:viewpager2:1.0.0-alpha04이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.

새로운 기능

  • offscreenPageLimit: 뷰 계층 구조에 보관된 페이지 View/Fragment 수를 엄격히 제어할 수 있습니다.

API 변경사항

  • orientationisUserScrollable 속성이 더 이상 SavedState의 일부가 아닙니다.
  • FragmentStateAdaptersaveStaterestoreState 메서드가 완료되었습니다.
  • ViewPager2.OrientationViewPager2.ScrollState 주석이 비공개로 전환되었습니다.

버그 수정

  • SavedState: Activity가 제거되거나 다시 생성될 때 복원 문제가 수정되었습니다.
  • SavedState: 어댑터가 설정될 때까지 복원이 지연됩니다.
  • OnPageChangeCallback: 사소한 에지 케이스가 수정되었습니다.

버전 1.0.0-alpha03

2019년 4월 3일

androidx.viewpager2:viewpager2:1.0.0-alpha03이 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.

새로운 기능

  • 프로그래매틱 방식으로 ViewPager2를 스크롤하는 기능: fakeDragBy(offsetPx)

API 변경사항

  • 이제 FragmentStateAdapter에는 Lifecycle 객체가 필요합니다. 호스트 FragmentActivity 또는 호스트 Fragment에서 객체를 얻을 수 있도록 유틸리티 생성자 두 개를 추가했습니다.

버그 수정

  • 다양한 Fragment 지원 수정사항은 다음과 같습니다.
    • 최소화 과정 중에 또는 화면 회전 중에 데이터 세트 업데이트를 처리합니다.
    • 회전 후 관련 없는 프래그먼트를 삭제합니다.
    • 삭제된 항목의 저장 상태를 삭제합니다.
  • PageChangeCallback: 여백이 있는 페이지의 페이지 오프셋 계산을 수정했습니다.

버전 1.0.0-alpha02

2019년 3월 13일

androidx.viewpager2:viewpager2:1.0.0-alpha02이 출시되었습니다. 이 버전에 포함된 커밋의 전체 목록은 여기에서 확인할 수 있습니다.

새로운 기능

  • 사용자 입력을 사용 중지하는 기능(setUserInputEnabled, isUserInputEnabled)

API 변경사항

  • 최종 ViewPager2 클래스

버그 수정

  • FragmentStateAdapter 안정성을 수정했습니다.

버전 1.0.0-alpha01

2019년 2월 7일

androidx.viewpager2:viewpager2 1.0.0-alpha01이 출시되었습니다. 이 버전은 ViewPager2의 최초 출시입니다.

새로운 기능

  • 이전 android.support.v4.view.ViewPager(VP1)와의 차이점은 다음과 같습니다.
    • 오른쪽에서 왼쪽(RTL) 레이아웃 지원
    • 수직 방향 지원
    • 완전히 기능하는 notifyDataSetChanged(VP1 버그 해결)

API 변경사항

  • FragmentStateAdapterFragmentStatePagerAdapter를 대체합니다.
  • RecyclerView.AdapterPagerAdapter를 대체합니다.
  • registerOnPageChangeCallbackaddPageChangeListener를 대체합니다.

알려진 문제

  • clipToPadding
  • fakeDrag 없음
  • JavaDoc
  • 방향과 평행한 중첩된 스크롤
  • 오프스크린 제한 제어 없음
  • 더 나은 TabLayout 통합 필요
  • pageWidth setter 없음(강제 100%/100%)
  • 페이지 변환기: 하드웨어/소프트웨어 레이어 선택이 없음. 드로잉 역순서 없음
  • 현재 이전의 페이지를 삽입할 때 현재 항목을 계속 표시
  • 키보드 탐색 작업 필요
  • FragmentStateAdapter 안정성/성능 개선 예정