ViewPager2

Wyświetlanie widoków lub fragmentów w formacie, który można przesuwać.
Najnowsza aktualizacja Wersja stabilna Wersja kandydująca do publikacji Wersja beta Wersja alfa
14 maja 2024 r. 1.1.0 - - -

Zależności AndroidX

Aby używać ViewPager2, dodaj do pliku build.gradle projektu tę zależność AndroidX:

Odlotowe

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

Kotlin

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

Prześlij opinię

Twoja opinia pomoże nam ulepszyć Jetpacka. Jeśli odkryjesz nowe problemy lub masz pomysły na ulepszenie tej biblioteki, daj nam znać. Zanim utworzysz nową kartę, zapoznaj się z dotychczasowymi problemami w tej bibliotece. Możesz oddać głos na istniejący problem, klikając przycisk gwiazdki.

Tworzenie nowego problemu

Więcej informacji znajdziesz w dokumentacji narzędzia Issue Tracker.

Wersja 1.1.0

Wersja 1.1.0

14 maja 2024 r.

Publikacja androidx.viewpager2:viewpager2:1.1.0 Wersja 1.1.0 zawiera te zmiany.

Ważne zmiany od wersji 1.0.0

  • Usunięto awarie, które występowały podczas korzystania z RecyclerView 1.3.1-rc01 lub nowszej wersji.
  • ViewPager2 prawidłowo wypełnia teraz pola CollectionInfoCollectionItemInfo, które w przypadku RecyclerView 1.2.0-alpha02 i nowszych nie są już wypełniane domyślnie.
  • Dodaliśmy interfejs FragmentTransactionCallback do nasłuchiwania zmian cyklu życia fragmentu, które zachodzą w FragmentStateAdapter.
  • Rozwiązaliśmy problem FragmentStateAdapter z początkową widocznością menu fragmentu podczas dodawania fragmentu do FragmentManager.
  • Naprawiono wysyłanie wstawek okien: wszystkie strony otrzymują teraz te same wstawki. Ze względu na sposób wysyłania WindowInsets w starszych wersjach interfejsu API (< API 30), który może uniemożliwiać udostępnianie wstawek widokom równorzędnym, musisz włączyć tę poprawkę za pomocą WindowInsetsApplier.install(viewPager2), jeśli chcesz stosować wstawki na urządzeniach z interfejsem API w wersji < 30.

Wersja 1.1.0-rc01

1 maja 2024 r.

androidx.viewpager2:viewpager2:1.1.0-rc01 nie zawiera żadnych istotnych zmian w porównaniu z wersją 1.1.0-beta02. Wersja 1.1.0-rc01 zawiera te zmiany.

Wersja 1.1.0-beta02

24 maja 2023 r.

Publikacja androidx.viewpager2:viewpager2:1.1.0-beta02 Wersja 1.1.0-beta02 zawiera te zmiany.

Zmiany w interfejsie API

  • Dodano wywołania zwrotne zapisywania stanu fragmentu do FragmentTransactionCallback. (I45b90)
  • ViewPager2 nie próbuje już naprawiać uszkodzonego wysyłania WindowInsets w przypadku starszych wersji interfejsu API (< 30), ponieważ sama poprawka może być szkodliwa dla innych elementów ViewPager2. Poprawka jest nadal dostępna, ale stała się opcjonalna, dzięki czemu deweloperzy mogą podejmować decyzje w poszczególnych przypadkach. Aby włączyć poprawkę, zadzwoń pod numer WindowInsetsApplier.install(viewPager2)). (Ic9a85)

Poprawki błędów

  • Rozwiązywanie problemów ze zgodnością z nowszymi wersjami RecyclerView. Użytkownicy tej wersji ViewPager2 powinni zaktualizować ją co najmniej do wersji RecyclerView 1.3.1-rc01.

Wersja 1.1.0-beta01

4 sierpnia 2021 r.

Publikacja androidx.viewpager2:viewpager2:1.1.0-beta01 Wersja 1.1.0-beta01 zawiera te zmiany.

Zmiany w interfejsie API

Poprawki błędów

  • Poprawiono wysyłanie wstawek okien. Wszystkie strony otrzymują teraz te same wstawki. (I47fef)

Wersja 1.1.0-alpha01

1 kwietnia 2020 r.

Publikacja androidx.viewpager2:viewpager2:1.1.0-alpha01 Wersja 1.1.0-alpha01 zawiera te zmiany.

Ta wersja zawiera zmianę w RecyclerView 1.2.0-alpha02, która polega na wypełnianiu pól CollectionInfoCollectionItemInfo, które RecyclerView nie udostępnia już domyślnie. Podczas aktualizacji do wersji RecyclerView 1.2.0-alpha02 zaktualizuj też ViewPager2, aby uniknąć regresji w zakresie ułatwień dostępu.

Nowe funkcje

  • Dodaliśmy interfejs FragmentTransactionCallback do nasłuchiwania zmian cyklu życia fragmentu, które zachodzą w FragmentStateAdapter. (Ibda77)

Poprawki błędów

  • Rozwiązaliśmy problem FragmentStateAdapter z początkową widocznością menu fragmentu podczas dodawania fragmentu do FragmentManager. (I9d2ff, b/144442240)

Wersja 1.0.0

Wersja 1.0.0

20 listopada 2019 r.

androidx.viewpager2:viewpager2:1.0.0 jest udostępniana bez zmian w stosunku do wersji 1.0.0-rc01. Wersja 1.0.0 zawiera te zatwierdzenia.

Główne funkcje wersji 1.0.0

  • Ulepszenia w stosunku do poprzedniej implementacji ViewPager:
    • Obsługa układu RTL (od prawej do lewej)
    • Obsługa orientacji pionowej
    • Niezawodna obsługa Fragment (w tym obsługa zmian w kolekcji Fragment)
    • Animacje zmian w zbiorze danych (w tym obsługa DiffUtil)
  • Łatwa migracja z poprzedniej implementacji ViewPager (w miarę możliwości zachowanie zgodności interfejsu API). Zapoznaj się z przewodnikiem po migracjiprzykładową aplikacją.

Zapoznaj się z przewodnikiem po używaniu ViewPager2 do przesuwania między fragmentami.

Wersja 1.0.0-rc01

23 października 2019 r.

androidx.viewpager2:viewpager2:1.0.0-rc01 została opublikowana bez zmian od 1.0.0-beta05. Wersja 1.0.0-rc01 zawiera te zatwierdzenia.

Wersja 1.0.0-beta05

9 października 2019 r.

Publikacja androidx.viewpager2:viewpager2:1.0.0-beta05 Wersja 1.0.0-beta05 zawiera te zmiany.

Poprawki błędów

  • Poprawka dotycząca sytuacji, w której kliknięcie ikony requestFocus na stronie poza ekranem powodowało zmianę strony. Działanie jest teraz zgodne z oryginalnym widokiem ViewPager. (b/140656866)
  • Poprawka dotycząca ikony focus pozostającej na stronie poza ekranem po zmianie strony. Ostrość jest teraz usuwana podczas zmiany strony. (b/140656866)
  • Poprawka kolejności transakcji Fragmentwstrzymania / wznowienia podczas zmiany strony (zawsze wstrzymujemy działanie starego głównego produktu przed wznowieniem działania nowego). (b/139489059)
  • Poprawka dla canScrollHorizontally(int) i canScrollVertically(int) – teraz zwracają informację, czy ViewPager2 może przewijać w danym kierunku. (b/141848404)
  • Rozwiązaliśmy problem w SwipeRefreshLayout, aby lepiej współpracował z ViewPager2.

Wersja 1.0.0-beta04

5 września 2019 r.

Publikacja androidx.viewpager2:viewpager2:1.0.0-beta04 Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Poprawki błędów

  • Rozwiązanie problemu z przypadkiem brzegowym FragmentStateAdapter w przypadku Fragment stosu wstecznego. (b/139095195)
  • Rozwiązaliśmy problem z elementem EditText, który w przypadku określonych konfiguracji atrybutów powodował przewijanie lub przeskakiwanie strony podczas pisania lub ustawiania fokusu. (b/138044582, b/139432498)
  • Rozwiązaliśmy problem z instancjami ItemDecoration i wprowadziliśmy obejście problemu z pozycjonowaniem wskaźnika przewijania. (b/139012032)
  • W innych komponentach naprawiono szereg problemów, aby lepiej współpracowały z ViewPager2: RecyclerView, NestedScrollViewNavigation.

Wersja 1.0.0-beta03

7 sierpnia 2019 r.

Publikacja androidx.viewpager2:viewpager2:1.0.0-beta03 Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Poprawki błędów

  • Rozwiązanie problemu FragmentStateAdapter z przejściowym stanem Fragment. b/134246546
  • Rozwiązanie problemów z currentItemscrollState, które występowały, gdy zestaw danych był zmieniany podczas płynnego przewijania (rozwiązano przypadki brzegowe). b/137642608
  • Poprawka dotycząca animacji PageTransformer (w tym MarginPageTransformer), które powodowały konflikt z animacjami zmian zbioru danych. b/134658996
  • Poprawka dotycząca animacji płynnego przewijania w przypadku dużych zbiorów danych (float limit wartości całkowitych). b/134858960

Wersja 1.0.0-beta02

19 lipca 2019 r.

Publikacja androidx.viewpager2:viewpager2:1.0.0-beta02 Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Poprawki błędów

  • Usunięto niezamierzoną zależność jacoco, która została wprowadzona w wersji 1.0.0-beta01. (b/137782951)

Wersja 1.0.0-beta01

17 lipca 2019 r.

Publikacja androidx.viewpager2:viewpager2:1.0.0-beta01 Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Poprawki błędów

  • Poprawka błędu ViewPager2.updateCurrentItem podczas przewijania i aktualizowania zbioru danych
  • Rozwiązanie problemu z awarią NullPointerException związaną z ViewPager2.isLayoutRtl
  • TOUCH_SLOP_PAGING jest teraz domyślnym progiem dotyku
  • OnPageChangeCallback zdarzeń poprawionych w przypadku pustych adapterów (strona 0 zamiast -1, aby zachować zgodność z ViewPager1)

Znane problemy

Wersja 1.0.0-alpha06

2 lipca 2019 r.

Publikacja androidx.viewpager2:viewpager2:1.0.0-alpha06 Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

To ostatnia planowana wersja alfa przed zamrożeniem interfejsu API i przejściem do wersji beta. Prześlij nam opinię o interfejsie API.

Nowe funkcje

  • Podstawy ulepszonych ułatwień dostępu: ACTION_PAGE_RIGHT, ACTION_PAGE_DOWN itp.

Zmiany w interfejsie API

  • FragmentStateAdapter: dodatkowe produkty Fragment są ograniczone do STARTED, a ich menuVisibility jest ustawione na false.
  • PageTransformer, MarginPageTransformer, CompositePageTransformer: dokumentacja dotycząca positionfixed.

Poprawki błędów

  • currentItem po naprawieniu zmiany zbioru danych / zmiany adaptera.
  • MarginPageTransformeroffscreenPageLimit problemem został naprawiony.
  • Działania związane z ułatwieniami dostępu w przypadku FakeDrag zachowują się teraz prawidłowo.

Wersja 1.0.0-alpha05

5 czerwca 2019 r.

Publikacja androidx.viewpager2:viewpager2:1.0.0-alpha05 Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

  • ItemDecorator wprowadzono z zachowaniem zgodnym z RecyclerView.
  • MarginPageTransformer wprowadzono, aby umożliwić tworzenie odstępów między stronami (poza wcięciem strony).
  • CompositePageTransformer, aby umożliwić łączenie wielu PageTransformer.

Zmiany w interfejsie API

  • Metoda FragmentStateAdapter#getItem została zmieniona na FragmentStateAdapter#createFragment – poprzednia nazwa metody była w przeszłości źródłem błędów.
  • Wartość OFFSCREEN_PAGE_LIMIT_DEFAULT zmieniła się z 0 na -1. Jeśli używasz stałej OFFSCREEN_PAGE_LIMIT_DEFAULT, nie musisz zmieniać kodu klienta.

Poprawki błędów

  • Poprawiliśmy działanie getCurrentItem(), gdy SCROLL_STATE_SETTLING zostaje przerwane przez przeciągnięcie w przeciwnym kierunku.
  • FragmentStateAdapter Problemy z ładowaniem klas rozwiązane w kontekście „Nie przechowuj aktywności”.
  • Ulepszono dokumentację setOffscreenPageLimit.

Wersja 1.0.0-alpha04

7 maja 2019 r.

Publikacja androidx.viewpager2:viewpager2:1.0.0-alpha04 Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

  • offscreenPageLimit: umożliwia ścisłą kontrolę liczby stron View / Fragment przechowywanych w hierarchii widoków.

Zmiany w interfejsie API

  • Atrybuty orientation i isUserScrollable nie są już częścią SavedState
  • Metody saveState i restoreState zostały ostatecznie wprowadzone w FragmentStateAdapter
  • ViewPager2.OrientationViewPager2.ScrollState adnotacje zostały ustawione jako niepubliczne.

Poprawki błędów

  • SavedState: rozwiązano problem z przywracaniem, gdy Activity zostanie zniszczony lub ponownie utworzony.
  • SavedState: opóźnione przywracanie do momentu ustawienia adaptera
  • OnPageChangeCallback: naprawiono drobne przypadki brzegowe

Wersja 1.0.0-alpha03

3 kwietnia 2019 r.

Publikacja androidx.viewpager2:viewpager2:1.0.0-alpha03 Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

  • Możliwość programowego przewijania ViewPager2: fakeDragBy(offsetPx).

Zmiany w interfejsie API

  • FragmentStateAdapter wymaga teraz obiektu Lifecycle. Dodano 2 konstruktory narzędziowe, aby uzyskać go z hosta FragmentActivity lub hosta Fragment.

Poprawki błędów

  • Liczne poprawki dotyczące obsługi Fragment:
    • obsługiwanie aktualizacji zbioru danych w przypadku zminimalizowania aplikacji lub obrócenia ekranu;
    • usuwanie nieistotnych fragmentów po obróceniu;
    • usuwanie zapisanego stanu usuniętych elementów.
  • PageChangeCallback: poprawiono obliczanie przesunięcia strony w przypadku stron z marginesami;

Wersja 1.0.0-alpha02

13 marca 2019 r.

Publikacja androidx.viewpager2:viewpager2:1.0.0-alpha02 Pełną listę zmian zawartych w tej wersji znajdziesz tutaj.

Nowe funkcje

  • Możliwość wyłączenia wprowadzania danych przez użytkownika (setUserInputEnabled, isUserInputEnabled)

Zmiany w interfejsie API

  • Klasa ViewPager2 final

Poprawki błędów

  • FragmentStateAdapter poprawki stabilności,

Wersja 1.0.0-alpha01

7 lutego 2019 r.

Publikacja androidx.viewpager2:viewpager2 1.0.0-alpha01 To pierwsza wersja ViewPager2.

Nowe funkcje

  • W porównaniu z poprzednikiem android.support.v4.view.ViewPager (VP1):
    • Obsługa układu od prawej do lewej
    • Obsługa orientacji pionowej
    • notifyDataSetChanged w pełni funkcjonalna (błędy VP1 zostały usunięte);

Zmiany w interfejsie API

  • FragmentStateAdapter zastępuje FragmentStatePagerAdapter
  • RecyclerView.Adapter zastępuje PagerAdapter
  • registerOnPageChangeCallback zastępuje addPageChangeListener

Znane problemy

  • clipToPadding
  • no fakeDrag
  • JavaDoc
  • zagnieżdżone przewijanie równoległe do orientacji,
  • brak kontroli limitu poza ekranem,
  • potrzebuje lepszej integracji z TabLayout,
  • brak ustawienia szerokości strony (wymuszone 100%/100%)
  • przekształcanie strony: brak wyboru warstwy sprzętowej lub programowej, brak odwróconej kolejności rysowania;
  • zachowaj widoczność bieżącego elementu podczas wstawiania strony przed bieżącą
  • nawigacja przy użyciu klawiatury wymaga dodatkowych działań
  • FragmentStateAdapter poprawki stabilności i wydajności