J'ai un ViewPager
qui instancie un View
. Je voudrais désactiver momentanément le défilement du viewpager et les boutons enfants pendant qu'un résultat de recherche est renvoyé à la vue. J'ai appelé viewPager.setEnabled(false)
mais cela ne le désactive pas.
Quelqu'un a une idée?
android
android-viewpager
mAndroid
la source
la source
Réponses:
Une solution simple est de créer votre propre sous - classe de
ViewPager
qui a unprivate boolean
drapeau,isPagingEnabled
. Remplacez ensuite les méthodesonTouchEvent
etonInterceptTouchEvent
. SiisPagingEnabled
égal à true, invoquez lasuper
méthode, sinonreturn
.Ensuite, dans votre
Layout.XML
fichier, remplacez les<com.android.support.V4.ViewPager>
balises par des<com.yourpackage.CustomViewPager>
balises.Ce code a été adapté de ce billet de blog .
la source
Il existe une solution simple pour celui-ci:
Lorsque vous souhaitez désactiver le défilement du visualiseur, alors:
Et lorsque vous souhaitez le réactiver, alors:
Cela fera l'affaire.
la source
Voici ma variante légère de la réponse de Slayton:
Avec mon code, vous pouvez désactiver la pagination avec
setEnable()
.la source
onInterceptTouchEvent()
empêchera les vues enfants de recevoir une entrée. Dans la plupart des cas, ce n'est pas le comportement prévu.J'ai trouvé une solution simple.
la source
Je suggère une autre façon de résoudre ce problème. L'idée est d'encapsuler votre viewPager par un scrollView, de sorte que lorsque ce scrollView n'est pas défilable, votre viewPager ne le soit pas non plus.
Voici ma mise en page XML:
Aucun code nécessaire.
Fonctionne bien pour moi.
la source
Pour désactiver le balayage
Pour activer le balayage
la source
La meilleure solution qui a fonctionné pour moi est:
Après cela, le défilement sera désactivé au toucher et vous pourrez toujours utiliser la
setCurrentItem
méthode pour changer de page.la source
canScrollHorizontally()
méthode n'a aucun effet dans le scénario actuel. Il n'est même pas appelé lorsque le balayage se produit.Voici une réponse dans Kotlin et androidX
la source
Que diriez-vous de ceci:
j'ai utilisé
CustomViewPager
et ensuite, remplacer la méthode scrollTo
J'ai vérifié le mouvement en effectuant beaucoup de petits balayages, il ne défile pas vers d'autres pages.
la source
View.scrollTo(int x, int y)
résolu ce problème pour moi. MerciDans mon cas d'utilisation de ViewPager 2 alpha 2, l'extrait ci-dessous fonctionne
viewPager.isUserInputEnabled = false
reportez-vous à ceci pour plus de changements dans viewpager2 1.0.0-alpha02
Quelques modifications ont également été apportées à la dernière version de ViewPager 2 alpha 4
reportez-vous à ceci pour plus de changements dans viewpager2 # 1.0.0-alpha04
la source
La nouvelle classe ViewPager2 d'Androidx permet de désactiver le défilement avec la méthode setUserInputEnabled (false)
la source
La réponse de slayton fonctionne très bien. Si vous voulez arrêter de glisser comme un singe, vous pouvez remplacer un OnPageChangeListener avec
Vous ne pouvez donc glisser que côte à côte
la source
setPagingEnabled()
ne sait pas ce que fait cette méthode. Veuillez inclure le code complet.Ensuite, dans votre fichier Layout.XML, remplacez les balises --- com.android.support.V4.ViewPager --- par --- com.yourpackage.NonSwipeableViewPager --- balises.
la source