J'ai un RecyclerView
enveloppé dans un LinearLayout
et cela fonctionne parfaitement comme prévu. Je peux voir toutes les données dans la variable RecyclerView
telles que remplies. Jusqu'ici tout va bien.
Lorsque j'emballe la LinearLayout
dans une ScrollView
, la RecyclerView
devient vide. Je ne vois rien à l'intérieur de RecyclerView
. Pourquoi? Comment faire ce travail.
La page est l'un des onglets d'une ViewPagerIndicator
, de sorte que tout cet onglet doit figurer dans une ScrollView
.
Merci pour votre aide.
Définissez cette propriété pour ScrollView,
Android:fillViewport="true"
ScrollView s’étendra pour remplir le contenu
Après vérification de la mise en œuvre, la raison semble être la suivante. Si RecyclerView
est placé dans une ScrollView
, sa hauteur n'est pas spécifiée pendant le pas de mesure (car ScrollView
permet n'importe quelle hauteur) et, par conséquent, est égale à la hauteur minimale (selon l'implémentation) qui est apparemment nulle.
Vous avez deux options pour résoudre ce problème:
RecyclerView
ScrollView.fillViewport
sur true
RecyclerView
en dehors de ScrollView
. Je pense que c'est de loin la meilleure option. Si RecyclerView
height n'est pas limité - ce qui est le cas lorsqu'il est placé dans ScrollView
-, toutes les vues de l'adaptateur ont suffisamment de place verticalement et sont créées en une seule fois. Il n'y a plus de recyclage de vues, ce qui brise un peu l'objectif de RecyclerView
.Rien ne m'a aidé sauf ceci:
mRecyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
int action = e.getAction();
switch (action) {
case MotionEvent.ACTION_MOVE:
rv.getParent().requestDisallowInterceptTouchEvent(true);
break;
}
return false;
}
@Override
public void onTouchEvent(RecyclerView rv, MotionEvent e) {
}
@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
}
});
J'ai eu cette réponse là . Merci Piyush Gupta pour cela.
espérons que cette aide
Ajoutez cette ligne à votre recyclerView xml:
Android:nestedScrollingEnabled="false"
essayez-le, recyclerview se déroulera en douceur avec une hauteur flexible dans scrollview.
L'utilisation de RecyclerView dans ScrollView n'est pas une bonne pratique.
Lorsque RecyclerView encapsule son contenu, il ne recycle plus. Dans chaque enregistrement du jeu de données, une vue d'élément est conservée en mémoire tant que RecyclerView est dans la hiérarchie.
Lisez plus ici - https://Android.jlelse.eu/Android-dev-tip-4-91b7757b1f0a