J'ai créé une version Kotlin basée sur la conversion de cette réponse depuis Java : https://stackoverflow.com/a/13437997/8023278
Il n'existe pas de moyen intégré pour désactiver le glissement entre les pages d'un ViewPager. Ce qu'il faut, c'est une extension de ViewPager qui surcharge onTouchEvent et onInterceptTouchEvent pour empêcher l'action de glissement. Pour rendre l'opération plus générale, nous pouvons ajouter une méthode setSwipePagingEnabled pour activer/désactiver le balayage entre les pages.
class SwipeLockableViewPager(context: Context, attrs: AttributeSet): ViewPager(context, attrs) {
private var swipeEnabled = false
override fun onTouchEvent(event: MotionEvent): Boolean {
return when (swipeEnabled) {
true -> super.onTouchEvent(event)
false -> false
}
}
override fun onInterceptTouchEvent(event: MotionEvent): Boolean {
return when (swipeEnabled) {
true -> super.onInterceptTouchEvent(event)
false -> false
}
}
fun setSwipePagingEnabled(swipeEnabled: Boolean) {
this.swipeEnabled = swipeEnabled
}
}
Ensuite, dans notre fichier xml de présentation, nous utilisons notre nouveau SwipeLockableViewPager au lieu du ViewPager standard.
<mypackage.SwipeLockableViewPager
android:id="@+id/myViewPager"
android:layout_height="match_parent"
android:layout_width="match_parent" />
Maintenant, dans notre activité/fragment, nous pouvons appeler myViewPager.setSwipePagingEnabled(false)
et les utilisateurs ne pourront pas passer d'une page à l'autre.
UPDATE
En 2020, nous avons maintenant ViewPager2 . Si vous migrer à ViewPager2 il y a une méthode intégrée pour désactiver le swiping : myViewPager2.isUserInputEnabled = false
2 votes
Duplicata possible de Comment désactiver la pagination par glissement du doigt dans ViewPager tout en conservant la possibilité de glisser par programmation ?