ViewPager2

Wyświetlaj widoki danych lub fragmenty w formacie przesuwanym.
Najnowsza aktualizacja Wersja stabilna Kandydat do publikacji Wersja Beta Wersja alfa
14 maja 2024 r. 1.1.0 - - -

Zależności AndroidX

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

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ć Jetpack. Daj nam znać, jeśli znajdziesz nowe wydania lub masz pomysły na ulepszenie tej biblioteki. Zanim utworzysz nową bibliotekę, przejrzyj problemy z tą biblioteką. Możesz oddać głos w ramach istniejącego problemu, klikając przycisk gwiazdki.

Utwórz nowy numer

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

Wersja 1.1.0

Wersja 1.1.0

14 maja 2024 r.

Aplikacja androidx.viewpager2:viewpager2:1.1.0 została zwolniona. Wersja 1.1.0 zawiera te zatwierdzenia.

Ważne zmiany od wersji 1.0.0

  • Naprawia awarie występujące w przypadku korzystania z widoku RecyclerView 1.3.1-rc01 lub nowszego.
  • ViewPager2 teraz prawidłowo wypełnia pola CollectionInfo i CollectionItemInfo, które RecyclerView 1.2.0-alpha02 i nowsze nie są już domyślnie wypełniane.
  • Dodano interfejs FragmentTransactionCallback do nasłuchiwania zmian cyklu życia fragmentu, które mają miejsce w elemencie FragmentStateAdapter.
  • Rozwiązaliśmy problem FragmentStateAdapter z wstępną widocznością menu fragmentów podczas dodawania fragmentu do elementu FragmentManager.
  • Naprawiono wysyłanie odstępów między oknami: wszystkie strony otrzymują teraz te same odstępy. Ze względu na sposób, w jaki w starych wersjach interfejsu API (< API 30) są wysyłane WindowInsets, które mogą uniemożliwiać wstawianie elementów w widokach równorzędnych, musisz włączyć tę poprawkę za pomocą WindowInsetsApplier.install(viewPager2), jeśli chcesz stosować wstawki na urządzeniach z interfejsem API 30.

Wersja 1.1.0-rc01

1 maja 2024 r.

Wersja androidx.viewpager2:viewpager2:1.1.0-rc01 została opublikowana bez istotnych zmian od wersji 1.1.0 do wersji beta02. Wersja 1.1.0-rc01 zawiera te zatwierdzenia.

Wersja 1.1.0-beta02

24 maja 2023 r.

Aplikacja androidx.viewpager2:viewpager2:1.1.0-beta02 została zwolniona. Wersja 1.1.0-beta02 zawiera te zatwierdzenia.

Zmiany w interfejsie API

  • Do interfejsu FragmentTransactionCallback dodano wywołania zwrotne z zapisywaniem stanu fragmentu kodu. (I45b90)
  • ViewPager2 nie próbuje już naprawiać uszkodzonej funkcji WindowInsets w starszych wersjach interfejsu API (poniżej 30), ponieważ sama poprawka może być szkodliwa dla elementów równorzędnych ViewPager2. Poprawka jest nadal dostępna, ale została zaakceptowana, więc deweloperzy mogą podejmować decyzje indywidualnie. Włącz poprawkę, wywołując WindowInsetsApplier.install(viewPager2)). (Ic9a85)

Poprawki błędów

  • Rozwiąż problemy ze zgodnością w nowszych wersjach systemu RecyclerView. Użytkownicy tej wersji systemu ViewPager2 powinni zaktualizować go do wersji RecyclerView lub nowszej (1.3.1-rc01).

Wersja 1.1.0-beta01

4 sierpnia 2021 r.

Aplikacja androidx.viewpager2:viewpager2:1.1.0-beta01 została zwolniona. Wersja 1.1.0-beta01 zawiera te zatwierdzenia.

Zmiany w interfejsie API

Poprawki błędów

  • Rozwiązano problem z wysyłaniem wstawionych okien. Wszystkie strony mają teraz te same ustawienia. (I47fef)

Wersja 1.1.0-alfa01

1 kwietnia 2020 r.

Aplikacja androidx.viewpager2:viewpager2:1.1.0-alpha01 została zwolniona. Wersja 1.1.0-alpha01 zawiera te zatwierdzenia.

Ta wersja wiąże się ze zmianą obiektu RecyclerView w wersji 1.2.0-alpha02 przez wypełnienie pól CollectionInfo i CollectionItemInfo, które RecyclerView nie są już domyślnie udostępniane. Podczas aktualizacji do wersji RecyclerView 1.2.0-alpha02 zaktualizuj też ViewPager2, aby zapobiec ponownemu pogorszeniu ułatwień dostępu.

Nowe funkcje

  • Dodano interfejs FragmentTransactionCallback do nasłuchiwania zmian cyklu życia fragmentu, które mają miejsce w elemencie FragmentStateAdapter. (Ibda77)

Poprawki błędów

  • Rozwiązaliśmy problem FragmentStateAdapter z wstępną widocznością menu fragmentów podczas dodawania fragmentu do elementu FragmentManager. (I9d2ff, b/144442240)

Wersja 1.0.0

Wersja 1.0.0

20 listopada 2019 r.

Wersja androidx.viewpager2:viewpager2:1.0.0 została udostępniona bez zmian z wersji 1.0.0-rc01. Wersja 1.0.0 zawiera te zatwierdzenia.

Główne funkcje wersji 1.0.0

  • Ulepszenia poprzedniej implementacji obiektu ViewPager:
    • Obsługa układu od prawej do lewej
    • Obsługa orientacji pionowej
    • Niezawodna obsługa Fragment (w tym wprowadzanie zmian w bazowej kolekcji Fragment)
    • Animacje zmiany zbioru danych (w tym obsługa DiffUtil)
  • Łatwa migracja z poprzedniej implementacji ViewPager (w miarę możliwości spójność interfejsu API). Zobacz przewodnik po migracji i przykładową aplikację.

Zobacz przewodnik na temat przesuwania się między fragmentami przy użyciu ViewPager2.

Wersja 1.0.0-rc01

23 października 2019 r.

Wersja androidx.viewpager2:viewpager2:1.0.0-rc01 została udostępniona 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.

Aplikacja androidx.viewpager2:viewpager2:1.0.0-beta05 została zwolniona. Wersja 1.0.0-beta05 zawiera te zatwierdzenia.

Poprawki błędów

  • Napraw błąd requestFocus strony poza ekranem, który powoduje zmianę strony. Działanie jest teraz spójne z działaniem oryginalnego elementu ViewPager. (b/140656866)
  • Naprawiono błąd focus, który po zmianie strony pozostała na stronie poza ekranem. Podczas zmiany strony zaznaczenie jest teraz wyczyszczone. (b/140656866)
  • Rozwiązano problem z zamawianiem Fragment wstrzymywania / wznawiania transakcji podczas zmiany strony (obecnie zawsze wstrzymujemy stary element podstawowy przed wznowieniem nowego). (b/139489059)
  • Poprawiono błędy canScrollHorizontally(int) i canScrollVertically(int) – zwracają teraz, czy ViewPager2 może przewijać w określonym kierunku. (b/141848404)
  • Rozwiązaliśmy problem z funkcją SwipeOdświeżUkład, by działał lepiej z ViewPager2.

Wersja 1.0.0-beta04

5 września 2019 r.

Aplikacja androidx.viewpager2:viewpager2:1.0.0-beta04 została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Poprawki błędów

  • Naprawiono problem FragmentStateAdapter dotyczący wielkości liter w stosie wstecznym Fragment. (b/139095195)
  • Naprawiono błąd związany z elementem EditText. Niektóre konfiguracje atrybutów powodowały przewinięcie strony lub przewinięcie strony podczas wpisywania lub zaznaczania. (b/138044582, b/139432498)
  • Naprawiono problem z instancjami ItemDecoration i obejście pozycjonowania wskaźnika dalekiego przewijania. (b/139012032)
  • Naprawiliśmy kilka błędów w innych komponentach, które ułatwiają korzystanie z ViewPager2: RecyclerView, Nested ScrollView i Nawigacja.

Wersja 1.0.0-beta03

7 sierpnia 2019 r.

Aplikacja androidx.viewpager2:viewpager2:1.0.0-beta03 została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Poprawki błędów

  • Poprawiono problem FragmentStateAdapter z przejściowym stanem Fragment. b/134246546
  • Naprawiono problemy z currentItem i scrollState występujące, gdy zbiór danych zmienia się podczas płynnego przewijania (rozwiązania przystosowane do zagrożeń). b/137642608
  • Poprawiono animacje PageTransformer (w tym MarginPageTransformer) powodujące konflikt z animacjami zmiany zbioru danych. b/134658996
  • Poprawiono animacje płynnego przewijania w dużych zbiorach danych (limit wartości całkowitej: float). b/134858960

Wersja 1.0.0-beta02

19 lipca 2019 r.

Aplikacja androidx.viewpager2:viewpager2:1.0.0-beta02 została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Poprawki błędów

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

Wersja 1.0.0-beta01

17 lipca 2019 r.

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

Poprawki błędów

  • Naprawiono awarię ViewPager2.updateCurrentItem podczas przewijania i aktualizowania zbioru danych
  • Usunięto NullPointerException awarię związaną z samochodem ViewPager2.isLayoutRtl
  • TOUCH_SLOP_PAGING jest teraz domyślną funkcją dotyku
  • Naprawiono zdarzenia OnPageChangeCallback w przypadku pustych adapterów (strona 0 zamiast -1 w celu zachowania spójności z ViewPager1)

Znane problemy

Wersja 1.0.0-alfa06

2 lipca 2019 r.

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

To ostatnia wersja alfa planowana przed zablokowaniem interfejsu API i przejściem na jego wersję beta. Podziel się z nami opinią o interfejsie API.

Nowe funkcje

  • Podstawy ułatwienia dostępu: ACTION_PAGE_RIGHT, ACTION_PAGE_DOWN itp.

Zmiany w interfejsie API

  • FragmentStateAdapter: elementy Fragment inne niż główny mają limit STARTED, a ich parametr menuVisibility ma wartość false (fałsz).
  • PageTransformer, MarginPageTransformer, CompositePageTransformer: dokumentacja dotycząca positionpoprawiono.

Poprawki błędów

  • currentItem po zmianie zbioru danych / zmianie adaptera.
  • Naprawiono błąd MarginPageTransformer z offscreenPageLimit problemem.
  • Działanie ułatwień dostępu w systemie FakeDrag zostało naprawione.

Wersja 1.0.0-alfa05

5 czerwca 2019 r.

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

Nowe funkcje

  • Wprowadzono element ItemDecorator zgodnie z zasadami RecyclerView.
  • Wprowadzenie funkcji MarginPageTransformer, która umożliwia tworzenie odstępu między stronami (poza wbudowaniem strony).
  • Wprowadzono funkcję CompositePageTransformer, która umożliwia łączenie różnych elementów PageTransformer.

Zmiany w interfejsie API

  • Nazwa metody FragmentStateAdapter#getItem została zmieniona na FragmentStateAdapter#createFragment – poprzednia nazwa metody była w przeszłości źródłem błędów.
  • Zmieniono wartość OFFSCREEN_PAGE_LIMIT_DEFAULT z 0 na -1. Nie trzeba zmieniać kodu klienta, jeśli używana jest stała OFFSCREEN_PAGE_LIMIT_DEFAULTstała.

Poprawki błędów

  • Działanie getCurrentItem() zostało skorygowane, gdy przeciągnięcie w przeciwnym kierunku zakłóciło działanie urządzenia SCROLL_STATE_SETTLING.
  • FragmentStateAdapter problemów z modułami ładowania klas rozpatrzonych w kontekście „Nie zachowuj działań”.
  • Dokumentacja usługi setOffscreenPageLimit została ulepszona.

Wersja 1.0.0-alfa04

7 maja 2019 r.

Aplikacja androidx.viewpager2:viewpager2:1.0.0-alpha04 została zwolniona. Zatwierdzenia zawarte w tej wersji znajdziesz tutaj.

Nowe funkcje

  • offscreenPageLimit: umożliwia dokładną kontrolę nad liczbą 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 ukończone w FragmentStateAdapter
  • Adnotacje ViewPager2.Orientation i ViewPager2.ScrollState zostały ustawione jako niepubliczne

Poprawki błędów

  • SavedState: usunięto problem z przywracaniem, gdy Activity został zniszczony lub odtworzony
  • SavedState: opóźnione przywracanie do momentu skonfigurowania adaptera
  • OnPageChangeCallback: naprawiono drobne skrajne przypadki

Wersja 1.0.0-alfa03

3 kwietnia 2019 r.

Aplikacja androidx.viewpager2:viewpager2:1.0.0-alpha03 została zwolniona. 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 konstrukcje użytkowe w celu uzyskania ich z hosta FragmentActivity lub Fragment.

Poprawki błędów

  • Wprowadzono wiele poprawek dotyczących obsługi klienta Fragment:
    • obsługę aktualizacji zbioru danych przy zminimalizowaniu lub podczas rotacji ekranu;
    • usunięcie po rotacji nieistotnych fragmentów;
    • usunięcie zapisanego stanu usuniętych elementów.
  • PageChangeCallback: stałe obliczanie przesunięcia strony w przypadku stron z marginesami.

Wersja 1.0.0-alfa02

13 marca 2019 r.

Aplikacja 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

  • Finał zajęć ViewPager2

Poprawki błędów

  • FragmentStateAdapter poprawki stabilności

Wersja 1.0.0-alfa01

7 lutego 2019 r.

Aplikacja androidx.viewpager2:viewpager2 1.0.0-alpha01 została zwolniona. To jest pierwsza wersja ViewPager2.

Nowe funkcje

  • W porównaniu do jego poprzednika android.support.v4.view.ViewPager (VP1):
    • Obsługa układu od prawej do lewej (RTL)
    • Obsługa orientacji pionowej
    • W pełni funkcjonalne (notifyDataSetChanged) – rozwiązano błędy wersji VP1

Zmiany w interfejsie API

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

Znane problemy

  • clipToPadding
  • nie fakeDrag
  • dokument Java
  • zagnieżdżone przewijanie równoległe do orientacji
  • brak limitu elementów poza ekranem
  • wymaga lepszej integracji układu kart
  • brak metody ustawiania parametru pageWidth (wymuszane 100%/100%)
  • transformer strony: brak możliwości wyboru warstwy sprzętowej/oprogramowej; brak odwrotnej kolejności rysowania
  • utrzymuj bieżący element widoczny podczas wstawiania strony przed bieżącym
  • nawigacja za pomocą klawiatury wymaga działania
  • Wkrótce pojawią się ulepszenia stabilności / wydajności aplikacji FragmentStateAdapter