web-dev-qa-db-fra.com

Comment désactiver le balayage dans ViewPager2?

Est-il possible d'activer-désactiver le balayage dans le nouveau Android viewpager2 composant?

23
murgupluoglu

Il est maintenant possible d'activer-désactiver le balayage viewpager2 en utilisant Version 1.0.0-alpha02

Utilisez implementation 'androidx.viewpager2:viewpager2:1.0.0-alpha02'

Version 1.0.0-alpha02

Nouvelles fonctionnalités

  • Possibilité de désactiver l'entrée utilisateur (setUserInputEnabled, isUserInputEnabled)

Modifications de l'API

  • ViewPager2 finale de classe

Corrections de bugs

  • FragmentStateAdapter correctifs de stabilité

EXEMPLE DE CODE pour désactiver le balayage dans viewpager2

myViewPager2.setUserInputEnabled(false);

EXEMPLE DE CODE pour activer le balayage dans viewpager2

myViewPager2.setUserInputEnabled(true);
44
Nilesh Rathod

Sous la capuche ViewPager2 fonctionne avec RecyclerView pour gonfler les vues des fragments, mais le RecyclerView est masqué, ce qui le rend plus idiot.

 val rv : RecyclerView = viewPager.getChildAt(0) as RecyclerView
 rv.layoutManager = NonScrollingLayoutManager( rv.context, rv.layoutManager as LinearLayoutManager)

La méthode hacky consiste à mettre l'enfant à la position zéro qui est le RecyclerView et à désactiver le défilement dans le gestionnaire de disposition, en enveloppant le gestionnaire de disposition:

inner class NonScrollingLayoutManager(context: Context, val layoutManager: LinearLayoutManager) :
    LinearLayoutManager(context, layoutManager.orientation, layoutManager.reverseLayout) {

    override fun canScrollVertically(): Boolean  = layoutManager.orientation == HORIZONTAL


    override fun canScrollHorizontally(): Boolean  =  layoutManager.orientation == VERTICAL

}

Veuillez noter que si l'API change le gestionnaire de disposition utilisé pour RecyclerView, c'est-à-dire qu'ils s'éloignent du LinearLayoutManager cela ne fonctionnera pas et il aura besoin de certaines méthodes remplacées et s'assurera que les super méthodes sont appelées.

La deuxième approche est la sous-classe ViewPager2 qui est ViewGroup puis faites la magie de l'interception des événements tactiles, avant qu'ils ne soient envoyés aux vues enfants (comme vous le devineriez RecyclerView) et faites attention à ne pas empêcher les clics.

4