ViewPager2

wyświetlać widoki lub fragmenty w formacie umożliwiającym przewijanie;
Najnowsza aktualizacja Wersja stabilna Kandydat do wydania Wersja Beta Wersja alfa
14 maja 2024 r. 1.1.0 - - -

Zależności AndroidaX

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

Odlotowe

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

Kotlin

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

Opinia

Twoja opinia pomoże nam ulepszyć Jetpacka. Jeśli zauważysz nowe problemy lub masz pomysły na ulepszenie tej biblioteki, daj nam znać. Zanim utworzysz nowy problem, zapoznaj się z dotychczasowymi problemami w tej bibliotece. Możesz dodać swój głos do istniejącego problemu, klikając przycisk z gwiazdką.

Tworzenie nowego zgłoszenia

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

Wersja 1.1.0

Wersja 1.1.0

14 maja 2024 r.

androidx.viewpager2:viewpager2:1.1.0 został zwolniony. Wersja 1.1.0 zawiera te komisy.

Ważne zmiany od wersji 1.0.0

  • Usunięto awarie występujące podczas korzystania z elementu RecyclerView 1.3.1-rc01 lub nowszego.
  • ViewPager2 teraz prawidłowo wypełnia pola CollectionInfoCollectionItemInfo, które w komponencie RecyclerView 1.2.0-alpha02 i wyższym nie są już domyślnie wypełniane.
  • Dodano interfejs FragmentTransactionCallback do nasłuchiwania zmian cyklu życia fragmentu, które występują w ramach FragmentStateAdapter.
  • Rozwiązaliśmy problem FragmentStateAdapter z widocznością menu początkowego fragmentu podczas dodawania fragmentu do FragmentManager.
  • Naprawiono wysyłanie wstawionych okien: wszystkie strony mają teraz te same wstawione okna. Ze względu na sposób wysyłania WindowInsets w starszych wersjach interfejsu API (< API 30) może to uniemożliwiać wyświetlanie wstawionych elementów w powiązanych widokach. Jeśli chcesz stosować wstawione elementy na urządzeniach z wersją interfejsu API < 30, musisz włączyć tę poprawkę za pomocą WindowInsetsApplier.install(viewPager2).

Wersja 1.1.0-rc01

1 maja 2024 r.

androidx.viewpager2:viewpager2:1.1.0-rc01 jest wydana bez istotnych zmian w porównaniu z 1.1.0-beta02. Wersja 1.1.0-rc01 zawiera te zatwierdzenia.

Wersja 1.1.0-beta02

24 maja 2023 r.

Usługa androidx.viewpager2:viewpager2:1.1.0-beta02 została zwolniona. Wersja 1.1.0-beta02 zawiera te commity.

Zmiany w interfejsie API

  • Dodano do FragmentTransactionCallback wywołania obsługi zapisywania stanu fragmentu. (I45b90)
  • ViewPager2 nie próbuje już naprawiać uszkodzonego rozsyłania WindowInsets w starszych wersjach interfejsu API (< 30), ponieważ sama poprawka może być szkodliwa dla elementów pokrewnych ViewPager2. Naprawka jest nadal dostępna, ale wymaga zgody, aby deweloperzy mogli decydować o każdym przypadku z osobna. Aby włączyć tę poprawkę, zadzwoń pod numer WindowInsetsApplier.install(viewPager2)). (Ic9a85)

Poprawki błędów

  • Rozwiązanie 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.

androidx.viewpager2:viewpager2:1.1.0-beta01 został zwolniony. Wersja 1.1.0-beta01 zawiera te zatwierdzenia.

Zmiany w interfejsie API

Poprawki błędów

  • Naprawiono wysyłanie wstawionych okien. Wszystkie strony mają teraz te same wstawione okna. (I47fef)

Wersja 1.1.0-alpha01

1 kwietnia 2020 r.

androidx.viewpager2:viewpager2:1.1.0-alpha01 został zwolniony. Wersja 1.1.0-alpha01 zawiera te commity.

W tej wersji wprowadzono zmianę w RecyclerView 1.2.0-alpha02, która polega na wypełnieniu pól CollectionInfoCollectionItemInfo, których RecyclerView nie udostępnia już domyślnie. Podczas aktualizacji do wersji RecyclerView 1.2.0-alpha02 zaktualizuj też wersję ViewPager2, aby zapobiec regresji funkcji ułatwień dostępu.

Nowe funkcje

  • Dodano interfejs FragmentTransactionCallback do nasłuchiwania zmian cyklu życia fragmentu, które występują w ramach FragmentStateAdapter. (Ibda77)

Poprawki błędów

  • Rozwiązaliśmy problem FragmentStateAdapter z widocznością menu początkowego 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 wydana bez zmian w wersji 1.0.0-rc01. Wersja 1.0.0 zawiera te zatwierdzenia.

Najważniejsze funkcje wersji 1.0.0

  • Ulepszenia w porównaniu z poprzednią implementacją ViewPager:
    • Obsługa układu RTL (od prawej do lewej)
    • Obsługa orientacji pionowej
    • niezawodne obsługiwanie Fragment (w tym obsługa zmian w podstawowej kolekcji Fragment);
    • animacje zmiany zbioru danych (w tym obsługa DiffUtil),
  • Łatwa migracja z poprzedniej implementacji ViewPager (w miarę możliwości z użyciem interfejsu API). Zapoznaj się z przewodnikiem po migracji i przykładową aplikacją.

Zapoznaj się z przewodnikiem dotyczącym używania ViewPager2 do przesuwania się między fragmentami.

Wersja 1.0.0-rc01

23 października 2019 r.

androidx.viewpager2:viewpager2:1.0.0-rc01 jest publikowany 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.

androidx.viewpager2:viewpager2:1.0.0-beta05 został zwolniony. Wersja 1.0.0-beta05 zawiera te commity

Poprawki błędów

  • Poprawka dotycząca requestFocus na stronie poza ekranem, która powoduje zmianę strony. Zachowanie jest teraz spójne z pierwotnym ViewPager. (b/140656866)
  • Naprawiono błąd, który po zmianie strony pozostawał na stronie poza ekranem (focus). Podczas zmiany strony zaznaczenie zostanie wyczyszczone. (b/140656866)
  • Poprawka dotycząca kolejności wstrzymywania i wznawiania transakcji Fragment podczas zmiany strony (teraz zawsze wstrzymujemy stare podstawowe zamówienie, zanim wznowimy nowe). (b/139489059)
  • Poprawka dotycząca canScrollHorizontally(int)canScrollVertically(int) – teraz zwracają one informacje o tym, czy ViewPager2 może przewijać w danym kierunku. (b/141848404)
  • Rozwiązaliśmy problem z elementem SwipeRefreshLayout, aby lepiej współpracował z elementem ViewPager2.

Wersja 1.0.0-beta04

5 września 2019 r.

androidx.viewpager2:viewpager2:1.0.0-beta04 został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.

Poprawki błędów

  • Rozwiązanie problemu FragmentStateAdapter z rzadko występującym błędem w komponencie Fragment. (b/139095195)
  • Rozwiązanie problemu z EditText w przypadku niektórych konfiguracji atrybutów, które powodowały przewijanie lub przeskoki strony podczas pisania lub skupiania się na tekście. (b/138044582, b/139432498)
  • Rozwiązanie problemu z występowaniem ItemDecoration oraz obejście problemu z pozycjonowaniem wskaźnika przewijania. (B/139012032)
  • Naprawiliśmy kilka problemów w innych komponentach, aby lepiej współpracowały z ViewPager2: RecyclerView, NestedScrollViewNavigation.

Wersja 1.0.0-beta03

7 sierpnia 2019 r.

Usługa androidx.viewpager2:viewpager2:1.0.0-beta03 została zwolniona. Zmiany zawarte w tej wersji znajdziesz tutaj.

Poprawki błędów

  • Rozwiązanie problemu z FragmentStateAdapter ze stanem Fragment przejściowym. b/134246546
  • Rozwiązanie problemów currentItemscrollState, gdy zestaw danych jest zmieniany podczas płynnego przewijania (rozwiązano przypadki skrajne). b/137642608
  • Poprawka błędu animacji PageTransformer (w tym MarginPageTransformer) powodujących konflikt z animacjami zmian w zestawie danych. b/134658996
  • Poprawiono płynne animacje przewijania w dużych zbiorach danych (float limit wartości całkowitej). b/134858960

Wersja 1.0.0-beta02

19 lipca 2019 r.

androidx.viewpager2:viewpager2:1.0.0-beta02 został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.

Poprawki błędów

  • Usunięto niezamierzoną zależność jacoco w 1.0.0-beta01. (b/137782951)

Wersja 1.0.0-beta01

17 lipca 2019 r.

androidx.viewpager2:viewpager2:1.0.0-beta01 został zwolniony. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Poprawki błędów.

  • Rozwiązanie problemu z zawieszaniem się ViewPager2.updateCurrentItem podczas przewijania i aktualizowania zbioru danych
  • Rozwiązanie problemu z awarią NullPointerException związanego z ViewPager2.isLayoutRtl
  • TOUCH_SLOP_PAGING jest teraz domyślną wartością slop
  • Naprawiono zdarzenia OnPageChangeCallback 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.

Usługa androidx.viewpager2:viewpager2:1.0.0-alpha06 została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

To ostatnia zaplanowana wersja alfa przed zamrożeniem interfejsu API i przejściem na wersję beta. Prześlij nam opinię na temat interfejsu API.

Nowe funkcje

  • podstawy ułatwień dostępu: ACTION_PAGE_RIGHT, ACTION_PAGE_DOWN itd.

Zmiany w interfejsie API

  • FragmentStateAdapter: liczba elementów innych niż głównych Fragment jest ograniczona do STARTED, a ich menuVisibility ma wartość false.
  • PageTransformer, MarginPageTransformer, CompositePageTransformer: dokumentacja dla positionnaprawiona.

Poprawki błędów

  • currentItem po zmianie zestawu danych / adaptera.
  • MarginPageTransformer z offscreenPageLimit problemem naprawionym.
  • Naprawiono działanie funkcji ułatwień dostępu w trybie FakeDrag.

Wersja 1.0.0-alpha05

5 czerwca 2019 r.

Usługa androidx.viewpager2:viewpager2:1.0.0-alpha05 została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

  • ItemDecorator wprowadzony z zachowaniem zachowania zgodnego z RecyclerView.
  • MarginPageTransformer wprowadzono, aby umożliwić tworzenie przestrzeni między stronami (poza wstawką strony).
  • Wprowadziliśmy CompositePageTransformer, aby umożliwić łączenie wielu PageTransformer.

Zmiany w interfejsie API

  • Metoda FragmentStateAdapter#getItem została przemianowana na FragmentStateAdapter#createFragment – poprzednia nazwa metody w przeszłości powodowała błędy.
  • Zmieniono wartość parametru OFFSCREEN_PAGE_LIMIT_DEFAULT z 0 na -1. Jeśli używasz stałej wartości OFFSCREEN_PAGE_LIMIT_DEFAULT, nie musisz wprowadzać zmian w kodzie klienta.

Poprawki błędów

  • Poprawiono działanie funkcji getCurrentItem(), gdy SCROLL_STATE_SETTLING zostanie przerwane przez przeciąganie w przeciwnym kierunku.
  • FragmentStateAdapterProblemy z ładownikiem klas rozwiązane w kontekście „Nie przechowuj działań”.
  • Ulepszono dokumentację setOffscreenPageLimit.

Wersja 1.0.0-alpha04

7 maja 2019 r.

androidx.viewpager2:viewpager2:1.0.0-alpha04 został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

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

Zmiany w interfejsie API

  • Atrybuty orientation i isUserScrollable nie są już częścią SavedState
  • Metody saveState i restoreState zostały uznane za ostateczne w FragmentStateAdapter
  • adnotacje ViewPager2.Orientation i ViewPager2.ScrollState zostały oznaczone jako prywatne.

Poprawki błędów.

  • SavedState: usunięto problem z przywracaniem po zniszczeniu / odtworzeniu zasobu Activity
  • SavedState: przywracanie jest opóźnione do czasu ustawienia adaptera
  • OnPageChangeCallback: usunięto drobne przypadki skrajne

Wersja 1.0.0-alpha03

3 kwietnia 2019 r.

androidx.viewpager2:viewpager2:1.0.0-alpha03 został zwolniony. Zmiany zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

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

Zmiany interfejsu API

  • FragmentStateAdapter wymaga teraz obiektu Lifecycle. Dodano 2 konstruktory pomocnicze do uzyskiwania wartości z hosta FragmentActivity lub hosta Fragment.

Poprawki błędów

  • Wiele poprawek dotyczących obsługi Fragment:
    • obsługa aktualizacji zbioru danych podczas zminimalizowania ich lub podczas obracania ekranu;
    • usuwanie nieistotnych fragmentów po rotacji;
    • usunięcie zapisanego stanu usuniętych elementów.
  • PageChangeCallback: poprawiono obliczenie przesunięcia strony w przypadku stron z marginesami.

Wersja 1.0.0-alpha02

13 marca 2019 r.

Usługa androidx.viewpager2:viewpager2:1.0.0-alpha02 została zwolniona. Pełną listę zatwierdzeń zawartych w tej wersji znajdziesz tutaj.

Nowe funkcje

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

Zmiany w interfejsie API

  • Końcowa klasa ViewPager2

Poprawki błędów.

  • FragmentStateAdapter poprawki stabilności

Wersja 1.0.0-alpha01

7 lutego 2019 r.

androidx.viewpager2:viewpager2 1.0.0-alpha01 został zwolniony. 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 (usterki VP1 zostały naprawione);

Zmiany w interfejsie API

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

Znane problemy

  • clipToPadding
  • no fakeDrag
  • JavaDoc
  • Nested Scrolling Parallel to Orientation
  • brak elementu sterującego ustawieniem limitu poza ekranem
  • wymaga lepszej integracji z układem kart
  • brak parametru pageWidth (wymuszone na 100%/100%)
  • Transformer strony: brak możliwości wyboru warstwy sprzętu i oprogramowania, brak odwrotnej kolejności rysowania
  • keep current item visible when inserting a page before current
  • Nawigacja za pomocą klawiatury wymaga poprawek
  • Wkrótce wprowadzimy FragmentStateAdapter poprawę stabilności lub wydajności