Android comment puis-je obtenir en cours de positon sur recyclerview que l'utilisateur fait défiler jusqu'à l'élément
dans mon RecyclerView
j'ai quelques éléments que l'utilisateur peut faire défiler et voir que, maintenant, je veux enregistrer cette position de défilement et qui après viennent à l'arrière, ce ci-dessous le code de retour 0 toujours et je ne peux enregistrer que
recyclerMarketLists.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() {
@Override
public void onScrollChanged() {
recyclerViewCurrentScrolledPosition = recyclerMarketLists.getScrollY();
Log.e("Y: ", recyclerViewCurrentSceolledPosition + "");
}
});
le Logcat:
07-07 18:28:30.919 2124-2124/com.sample.presentationproject E/Y:: 0
Vous devez vous connecter pour publier un commentaire.
Vous essayez d'obtenir de l'information sur le mauvais objet. Ce n'est pas la
RecyclerView
ni laAdapter
responsabilité mais les RecyclerView de LayoutManager.Au lieu de le générique
ViewTreeObserver.OnScrollChangedListener()
je vous recommande d'ajouter à la place de laRecyclerView.OnScrollListener
et l'utilisation de laonScrollStateChanged(RecyclerView recyclerView, int newState)
de rappel qui vous donne lanewState
, vous devez utiliserSCROLL_STATE_IDLE
pour récupérer sa position. Sens:Sur ladite méthode de rappel. L'espoir que j'ai fait ce assez clair pour vous, vous pouvez trouver de la documentation sur les classes ici:
RecyclerView.OnScrollListener
yigit (Google) la réponse sur les postes
recyclerView.scrollToPosition(recyclerViewLastPosition);
scrollToPosition
il n'en finit pas de défilement. Des indices?Merci pour la solution Joaquim Ley. Ceci permet de créer
recyclerView
horizontal
pager sans l'aide de n'importe quelle bibliothèque.Init
recyclerView
RecyclerView
est touché, pas sûr que c'est le plus performant.J'ai fait 7 changements dans ma MainActivity et a obtenu pixel-des résultats parfaits. Mon recyclerview se souvient TOUJOURS de son état précédent, lors du retour à partir d'une autre Activité (par exemple, DetailActivity).
Etape 1: Initialiser le layoutManager comme suit:
L'étape 2:
À l'intérieur de votre classe MainActivity, créer une variable STATIQUE pour organiser votre disposition du gestionnaire de l'etat pendant la transition entre les activités:
L'étape 3:
Également créer cette constante à l'intérieur de la MainActivity () ainsi:
public static final String KEY_LAYOUT_MANAGER_STATE = "layoutManagerState";
L'étape 4:
À l'intérieur de la méthode onCreate pour votre MainActivity effectuer le test suivant, (c'est à dire
L'étape 5:
Dans votre méthode onSaveInstanceState, assurez-vous de
enregistrer votre layoutManagerState comme un parcelable comme suit:
protected void onSaveInstanceState(Bundle outState) {
L'étape 6:
Place un code similaire dans la onResume() la méthode de MainActivity:
Étape 7:
Rappelez-vous que tout ce code a été placé à l'intérieur de mon MainActivity.java fichier Il est important
de se rappeler que le layoutManager est responsable du maintien de la position de défilement de la
recycleur de vue. Ainsi, l'enregistrement de l'état de la layoutManager est d'une importance primordiale. Le code pourrait
modulaire et placé à l'intérieur d'une coutume recyclerview, mais j'ai trouvé ceci pour être plus simple pour moi de
mettre en oeuvre.
Pour une condition similaire, en plus de certaines mesures doivent être effectuées sur de défilement de l'état a changé, je l'ai fait avec un défilement de l'auditeur:
}
C'est à cause de la pré-existant bug avec RecyclerView onScroll qui arrive à déclencher le rappel 2-3 fois ou plus. Et si il y a une action à effectuer, qui sera à la fin de l'exécution de plusieurs fois.