J'utilise StaggeredGridLayOutManager pour mon image Galerie. J'ai défini Le problème que je suis confronté est qu'à l'initialisation de l'application, les points de défilement au bas de la galerie. Je voudrais que le rouleau soit au sommet de la galerie lorsque l'utilisateur commence par l'utilisateur. P> J'ai essayé d'utiliser setrverselayout (true) code>, de sorte que les images soient empilées du bas.
ScrollToposition code> (extrait de code suivant), mais le rouleau se termine quelque part au milieu de la galerie, probablement parce que les images ne sont pas chargées correctement à la Temps d'appel
ScrollToposition CODE>. P>
mLayoutManager = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
mLayoutManager.setReverseLayout(true);
mRecyclerView.setLayoutManager(mLayoutManager);
mImageList = ((MainActivity)getActivity()).getImages();
adapter = new ImageAdapter(getActivity(),mImageList);
mRecyclerView.setAdapter(adapter);
mRecyclerView.scrollToPosition(mImageList.size()-1);
5 Réponses :
Essayez de trouver la première position visible en appelant FindFirstPompletSiBonSiPositions P >
Cela ne résoudra pas complètement le problème. Le premier élément visible ne sera pas toujours le dernier élément. Donc, je peux finir par faire défiler des positions différentes sur différentes pistes.
Essayez d'utiliser ScrollTopositionWithOffset () Code> Fonction de
StaggeredgridlayoutManager code> à la place. J'ai trouvé cela plus fiable que
ScrollToposition code>. Assurez-vous également que vous exécutez cette fonction à l'intérieur
gestionnaire (). POST () CODE>. Cela causera le
annulable code> à ajouter à la file d'attente de messagerie. Il fonctionnera une fois le fil d'interface utilisateur libre.
new Handler().post(new Runnable() {
@Override
public void run() {
staggeredGridLayoutManager.scrollToPositionWithOffset(mImageList.size() - 1, 0);
}
});
Malheureusement, ça n'a pas fonctionné pour moi. Merci d'avoir répondu
J'ai utilisé ScrollTopImposition à l'intérieur du dataObserver et cela fonctionne maintenant bien ..
Lorsque les charges de recyclerview sont visibles avec le code ci-dessous: P>
rcAdapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() { @Override public void onItemRangeInserted(int positionStart, int itemCount) { super.onItemRangeInserted(positionStart, itemCount); int count = rcAdapter.getItemCount(); int lastVisiblePositions[] = new int[2]; //for 2 columns int lastVisiblePosition = staggeredGridLayoutManager.findLastCompletelyVisibleItemPositions(lastVisiblePositions)[0]; // If the recycler view is initially being loaded or the user is at the bottom of the list, scroll // to the bottom of the list to show the newly added message. if (lastVisiblePosition == -1 || (positionStart >= (count- 1) && lastVisiblePosition == (positionStart - 1))) { mRecyclerView.scrollToPosition(positionStart); } } });
Semble intéressant.
J'ai résolu un problème similaire avant et voici la méthode: et: p> et: p> private void scrollRecyclerViewToTop() {
mRecyclerView.scrollToPosition(0);
mRecyclerView.scrollBy(0, Integer.MIN_VALUE);
}
Cela fonctionne lorsque je touche l'écran mais rien ne se présente si je ne touche pas. Je veux faire défiler la valeur par défaut qui est l'utilisateur ne nécessite pas de toucher. C'est la réponse la plus proche, donc je vais attribuer une prime pour vous. btw ma réponse fonctionne comme je veux.
Ce code peut vous aider, j'ai également utilisé ce lien dans le code
https://guides.codepath.com/android/endless-scrolling-withAdapterviews-and-RecyClerview P>
Chaque adaptateur (telle que ListView and GridView) prend en charge liaison aux événements Onscrolllistener qui sont déclenchés chaque fois qu'un L'utilisateur fait défiler la collection. Utilisation de ce système, nous pouvons définir une extrémité sans fin de base qui soutient la plupart des cas d'utilisation par Créer notre propre classe qui s'étend sur ongrolllistener: p> blockQuote>
xxx pré> p>