J'ai eu un RecyclerView dans ScrollView comme ceci:
<ScrollView
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<!--other stuff-->
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<Android.support.v7.widget.RecyclerView
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:visibility="gone"/>
</LinearLayout>
<!--other stuff-->
</ScrollView>
Et l'élément de RecyclerView
est un RelativeLayout
, à l'intérieur duquel se trouvent un EditText
et d'autres vues. Le layout_height
De ce RelativeLayout
et EditText
est à la fois wrap_content
. L'utilisateur peut entrer dans ce EditText
sans aucune limite de longueur/lignes afin que la hauteur de chaque élément soit différente.
Ensuite, j'ai trouvé que getItemCount()
dans Adapter
renvoie la vraie valeur mais onBindViewHolder()
est appelé de mauvais moments (moins qu'il ne devrait l'être), donc pas assez pour afficher tous les éléments.
J'ai trouvé que cela ne se produira que si j'écris recyclerView.setNestedScrollingEnabled(false)
. Mais je ne peux pas supprimer cette ligne. Parce que si je le faisais, le RecyclerView
ne défilerait pas facilement et ne serait pas harmonieux avec les autres vues à l'intérieur de ScrollView
et ScrollView
lui-même.
Cela se produit sur 6.0 mais pas sur 4.1.
J'ai communiqué avec Google sur cette page: https://code.google.com/p/Android/issues/detail?id=213914 et il m'a dit qu'il s'agissait d'un correctif de bogue pour RecyclerView
. Vous pouvez visiter cette page afin de mieux comprendre la question et mon objectif (il y a un petit exemple de projet pour y montrer le problème). Je ne suis pas encore d'accord avec lui et je veux résoudre le problème. Aidez-moi, merci d'avance.
J'ai trouvé la solution moi-même: remplacez ScrollView
par NestedScrollView
et conservez recyclerView.setNestedScrollingEnabled(false)
. Je ne sais pas si c'est pour ça que NestedScrollView
est fait mais ça marche.
AVIS:
NestedScrollView
n'est pas un enfant de ScrollView
mais de FrameLayout
.adjustResize
auto-simulé.