Est-il possible d'activer-désactiver le balayage dans le nouveau Android viewpager2
composant?
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'
Nouvelles fonctionnalités
setUserInputEnabled
, isUserInputEnabled
)Modifications de l'API
ViewPager2
finale de classeCorrections 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);
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.