Eu tenho um ViewPager
que instancia a View
. Gostaria de desativar momentaneamente a rolagem do visor e os botões filho enquanto um resultado de pesquisa é retornado à visualização. Estou ligando, viewPager.setEnabled(false)
mas isso não o desativa.
Alguém tem alguma idéia?
android
android-viewpager
mAndroid
fonte
fonte
Respostas:
Uma solução simples é criar sua própria subclasse de
ViewPager
que possui umaprivate boolean
bandeiraisPagingEnabled
,. Em seguida, substitua os métodosonTouchEvent
eonInterceptTouchEvent
. SeisPagingEnabled
igual a true, invoque osuper
método, caso contrárioreturn
.Em seguida, no seu
Layout.XML
arquivo, substitua as<com.android.support.V4.ViewPager>
tags por<com.yourpackage.CustomViewPager>
tags.Este código foi adaptado desta postagem do blog .
fonte
Existe uma solução fácil para este:
Quando você deseja desativar a rolagem do viewpager:
E quando você deseja reativá-lo, então:
Isso será o suficiente.
fonte
Aqui está minha variante leve da resposta de slayton:
Com o meu código, você pode desativar a paginação com
setEnable()
.fonte
onInterceptTouchEvent()
impedirá que as visualizações secundárias recebam entrada. Na maioria dos casos, esse não é o comportamento pretendido.Encontrei uma solução simples.
fonte
Sugiro outra maneira de resolver esse problema. A idéia é agrupar seu viewPager por um scrollView, para que, quando esse scrollView não for rolável, seu viewPager também não seja rolável.
Aqui está o meu layout XML:
Nenhum código é necessário.
Funciona bem para mim.
fonte
Para desativar o furto
Para ativar o furto
fonte
A melhor solução que funcionou para mim é:
Depois disso, a rolagem será desativada pelo toque e você ainda poderá usar o
setCurrentItem
método para alterar a página.fonte
canScrollHorizontally()
método não tem efeito no cenário atual. Nem é chamado quando o furto acontece.Aqui está uma resposta em Kotlin e androidX
fonte
Que tal isso:
eu usei
CustomViewPager
e, em seguida, substituo o scrollTo, para o método que
eu verifiquei o movimento ao fazer muitos pequenos furtos, ele não rola para outras páginas.
fonte
View.scrollTo(int x, int y)
resolveu esse problema para mim. ObrigadoNo meu caso de usar o ViewPager 2 alfa 2, o trecho abaixo funciona
viewPager.isUserInputEnabled = false
consulte isso para obter mais alterações no viewpager2 1.0.0-alpha02
Também foram feitas algumas alterações na versão mais recente do ViewPager 2 alpha 4
consulte isso para obter mais alterações no viewpager2 # 1.0.0-alpha04
fonte
A nova classe ViewPager2 do androidx permite desativar a rolagem com o método setUserInputEnabled (false)
fonte
A resposta de slayton funciona bem. Se você deseja parar de deslizar como um macaco, você pode substituir um OnPageChangeListener por
Então você só pode deslizar lado a lado
fonte
setPagingEnabled()
método faz. Por favor inclua o código completo.Em seguida, no arquivo Layout.XML, substitua as tags --- com.android.support.V4.ViewPager --- por --- com.yourpackage.NonSwipeableViewPager ---.
fonte