12
votes

Android empêche la recyclerview imbriquée de repositionner automatiquement

J'ai un point de vue comme article dans une mise en page linéaire, avec chaque élément du téléavertisseur de vue contenant un recyclerview. Le problème est que chaque fois que la page se charge initialement, ou lorsque je change de pages sur le point de vue, la vue Faites défiler automatiquement le début de la vue Recycler correspond au haut de l'écran, plutôt que de rester en veille.

Un .gif du problème est ici . Remarque Je ne fais pas défiler vers le bas, c'est le repositionnement automatique.

Comment puis-je empêcher la vue de repositionner automatiquement au début de la vue Recycler?


0 commentaires

3 Réponses :


31
votes

Vous pouvez ajouter cet attribut à votre présentation linéaire. La mise en page linéaire enfant direct de votre ScrollView.

    android:descendantFocusability="blocksDescendants"


4 commentaires

Il désactive plus forfairéview's Focus.So Il n'est plus touché ou cliquable ... Toute suggestion ou alternative pour ce problème?


@Harshit merci, ça résonne mon problème


Pourquoi cela aide-t-il?


Merci . bonne solution



1
votes

Je suppose que le problème n'est pas sur votre recyclageview mais sur votre visionneur. ViewPager a Setoffscreenpagelimit utilisé pour définir la page offscreen de votre fragment attaché au visualPager. Si vous avez 3 fragment attaché sur ViewPager, vous pouvez définir son paramètre comme celui-ci xxx

chaque fois que vous modifiez la page de pager, son fragment serait toujours sur le dernier état.


1 commentaires

Merci, cela fixe la commutation entre les onglets réinitialisant la position de défilement!



7
votes

Nous avons un problème similaire. Nous avons un recyclerview . Chaque élément de cette verticale recyclerview contient un recyclerview , comme dans l'application TV Android.

Lorsque nous avons mis à niveau les libs de support du 23.4.0 au 24.0.0 Le défilement automatique est soudainement apparu. En particulier, lorsque nous ouvrons une activité et nous revenons ensuite, le vertical recyclerview défile de sorte que l'horizontal actuel recyclerview la ligne ne reçoit pas couper et la ligne est complètement affichée.

Ajout Android: descendantFocusability = "Blocsdescendants" corrige le problème.

Cependant, j'ai trouvé une autre solution , qui fonctionne également. Dans notre cas, la verticale recyclerview est contenue dans un Framelayout . Si j'ajoute android: focautintouchmode = "vrai" à ce framelayout , le problème disparaît.

Il y a même un Troisième solution mentionnée ici , qui consiste essentiellement à appeler setFocusable (faux) Sur l'enfant / intérieur recyclerview s. Je n'ai pas essayé cela.

Au fait, il y a un Ouvrir le problème sur l'AOSP .


0 commentaires