Mam plik, ViewPager
który tworzy instancję View
. Chciałbym na chwilę wyłączyć przewijanie podglądu i przycisków potomnych, podczas gdy wynik wyszukiwania jest zwracany do widoku. Dzwonię, viewPager.setEnabled(false)
ale to go nie wyłącza.
Czy ktoś ma jakieś pomysły?
android
android-viewpager
mAndroid
źródło
źródło
Odpowiedzi:
Prostym rozwiązaniem jest stworzenie własnej podklasy
ViewPager
, który maprivate boolean
flagęisPagingEnabled
. Następnie zastąp metodyonTouchEvent
ionInterceptTouchEvent
. JeśliisPagingEnabled
równa się true, wywołajsuper
metodę, w przeciwnym raziereturn
.Następnie w
Layout.XML
pliku zastąp wszystkie<com.android.support.V4.ViewPager>
tagi<com.yourpackage.CustomViewPager>
tagami.Ten kod został dostosowany na podstawie tego posta na blogu .
źródło
Jest na to łatwe rozwiązanie:
Jeśli chcesz wyłączyć przewijanie podglądu, wtedy:
A jeśli chcesz go ponownie włączyć,:
To wystarczy.
źródło
Oto mój lekki wariant odpowiedzi Slaytona:
Za pomocą mojego kodu możesz wyłączyć stronicowanie za pomocą
setEnable()
.źródło
onInterceptTouchEvent()
uniemożliwi widokom podrzędnym otrzymywanie danych wejściowych. W większości przypadków nie jest to zamierzone zachowanie.Znalazłem proste rozwiązanie.
źródło
Proponuję inny sposób rozwiązania tego problemu. Pomysł polega na zawijaniu twojego viewPagera przez scrollView, tak że gdy ten scrollView nie jest przewijalny, twój viewPager też nie jest przewijalny.
Oto mój układ XML:
Nie potrzeba żadnego kodu.
U mnie działa dobrze.
źródło
Aby wyłączyć przesuwanie
Aby włączyć przesuwanie
źródło
Najlepsze rozwiązanie, które u mnie zadziałało to:
Po tym przewijanie zostanie wyłączone dotykiem i nadal możesz użyć
setCurrentItem
metody zmiany strony.źródło
canScrollHorizontally()
Metoda nie działa w obecnej sytuacji. Nie jest nawet wywoływane, gdy dzieje się przesunięcie.Oto odpowiedź w Kotlin i AndroidX
źródło
A co powiesz na to:
użyłem,
CustomViewPager
a następnie override scrollTo metody
Sprawdziłem ruch podczas wykonywania wielu małych przesunięć, nie przewija się do innych stron.
źródło
View.scrollTo(int x, int y)
rozwiązało ten problem za mnie. DziękiW moim przypadku używania ViewPager 2 alpha 2 poniższy fragment kodu działa
viewPager.isUserInputEnabled = false
zajrzyj do tego po więcej zmian w viewpager2 1.0.0-alpha02
Wprowadzono również pewne zmiany w najnowszej wersji ViewPager 2 alfa 4
zajrzyj do tego po więcej zmian w viewpager2 # 1.0.0-alpha04
źródło
Nowa klasa ViewPager2 z androidx pozwala wyłączyć przewijanie metodą setUserInputEnabled (false)
źródło
Odpowiedź Slaytona działa dobrze. Jeśli chcesz przestać przesuwać jak małpa, możesz zastąpić OnPageChangeListener za pomocą
Możesz więc przesuwać tylko obok siebie
źródło
setPagingEnabled()
robi ta metoda. Prosimy o dołączenie całego kodu.Następnie w pliku Layout.XML zamień wszystkie tagi --- com.android.support.V4.ViewPager --- na tagi --- com.yourpackage.NonSwipeableViewPager ---.
źródło