ViewPager2

최근 업데이트 현재 안정화 릴리스 다음 출시 후보 베타 릴리스 알파 릴리스
2019년 11월 20일 1.0.0 - - -

AndroidX 종속성

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

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

버전 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 지원(기본 컬렉션 변경사항 처리 포함)
    • 데이터세트 변경 애니메이션(DiffUtil 지원 포함)
  • 이전 ViewPager 구현에서 쉽게 이전할 수 있습니다(가능하다면 API 패리티). 이전 가이드샘플 앱을 참조하세요.

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

버전 1.0.0-rc01

2019년 10월 23일

androidx.viewpager2:viewpager2:1.0.0-rc01 버전은 1.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/138044582b/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 지원 수정사항은 다음과 같습니다.
    • 최소화된 동안 또는 화면 회전 중에 데이터 세트 업데이트를 처리합니다.
    • 회전 후 관련 없는 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 안정성/성능 개선 필요