4 votes

RecyclerView n'est pas vraiment wrap_content dans ScrollView

J'ai un ScrollView, qui contient un LinearLayout vertical. C'est un endroit où j'ajoute une certaine quantité de vues appelées "Section". "Section" est un LinearLayout, qui contient un TextView et `RecyclerView.

section:

Le problème est que parfois RecyclerView n'est pas vraiment wrap_content. Par conséquent, cela crée 2 types de problèmes (selon le type de solution que j'essaie d'utiliser).

  1. Il peut être non déroulable (il correspond à la hauteur de l'écran et je ne peux pas le faire défiler vers le bas pour voir le reste des éléments à l'intérieur).

  2. Il peut être déroulable de manière imbriquée.

Le problème initial est qu'il a un défilement imbriqué. Donc, je veux que les RecyclerViews soient simplement des LinearLayouts verticaux simples et que la seule chose qui doit avoir un effet de défilement soit le ScrollView racine.

Qu'ai-je essayé de faire?

  1. étendre le GridLayoutManager et remplacer la méthode canScrollVertically().:

    public boolean canScrollVertically(){ return false; }

  2. étendre la classe RecyclerView et remplacer

    @Override public boolean onInterceptTouchEvent(MotionEvent event){ return false; }

    @Override public boolean onTouchEvent(MotionEvent event){ return false; }

  3. Désactiver le NestedScrolling via xml partout où c'est possible.

  4. Remplacer GridLayoutManager en utilisant cette solution: SOLUTION

  5. Combiner 1-4

9voto

Ferdous Ahamed Points 12001

N'utilisez pas RecyclerView ni ListView à l'intérieur de ScrollView. Pour le défilement imbriqué, vous devriez utiliser NestedScrollView.

NestedScrollView est similaire à ScrollView, mais il prend en charge à la fois le rôle de parent et d'enfant de défilement imbriqué sur les anciennes et nouvelles versions d'Android. Le défilement imbriqué est activé par défaut.

SOLUTION:

1. Au lieu d'utiliser ScrollView, utilisez NestedScrollView comme conteneur de votre partie Section (RecyclerView et autres Vues).

2. Pour résoudre le problème de défilement, utilisez setNestedScrollingEnabled(false) pour votre RecyclerView.

0voto

M. Maximovich Points 78

La solution est la suivante : 1. Utilisez NestedScrollView 2. Remplacez GridLayoutManager.canScrollVertically() :

public boolean canScrollVertically(){ return false; }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X