161 votes

Faites défiler par programme jusqu'à une position spécifique dans un ListView Android

Comment puis-je faire défiler par programme jusqu'à une position spécifique dans un ListView ?

Par exemple, j'ai un String[] {A,B,C,D....} et je dois définir l'élément visible le plus visible du ListView sur l'index 21 de mes String[] .

394voto

HandlerExploit Points 3881

Pour un défilement direct:

 getListView().setSelection(21);
 

Pour un défilement lisse:

 getListView().smoothScrollToPosition(21);
 

64voto

amalBit Points 3406

Pour un SmoothScroll avec Défilement durée:

getListView().smoothScrollToPositionFromTop(position,offset,duration);

Paramètres
position -> Position pour faire défiler jusqu'à
offset ---->distance Souhaitée en pixels de la position à partir du haut de la vue lorsque le défilement est fini
durée-> Nombre de millisecondes à utiliser pour les faire défiler

Note: à Partir de l'API 11.

HandlerExploit réponse était ce que je cherchais, mais Ma liste est assez longue et aussi avec alphabet déroulant. Ensuite, j'ai trouvé que la même fonction peut prendre d'autres paramètres en plus :)


Edit:(De l'Afd suggestion)

La position de la sélection en cours:

int h1 = mListView.getHeight();
int h2 = v.getHeight();

mListView.smoothScrollToPositionFromTop(position, h1/2 - h2/2, duration);  

7voto

Inet Labs Points 21

J'ai défini OnGroupExpandListener et substitue onGroupExpand () en tant que:

et utilisez la méthode setSelectionFromTop () qui définit l'élément sélectionné et positionne la sélection y pixels à partir du bord supérieur de ListView. (Si vous êtes en mode tactile, l'élément ne sera pas sélectionné mais il sera toujours positionné correctement.) (Documents Android)

     yourlist.setOnGroupExpandListener (new ExpandableListView.OnGroupExpandListener()
    {

        @Override
        public void onGroupExpand(int groupPosition) {

            expList.setSelectionFromTop(groupPosition, 0);
            //your other code
        }
    });
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X