web-dev-qa-db-fra.com

Comment faire défiler ListView vers le bas?

Je pensais que ce serait une tâche simple, mais apparemment il n'y a aucun moyen de faire défiler listview vers le bas. Toutes les solutions que j'ai trouvées utilisent des variations de la méthode setSelection(lastItem) qui définit uniquement la sélection sur le dernier élément, mais ne défile pas vers le bas.

Dans mon cas, j'ai une liste vide (avec une longue vue vide ensemble d'en-têtes) et je veux faire défiler vers le bas.

Alors, y a-t-il un moyen de le faire?

Éditer:

Donc, pour ceux qui sont intéressés, la solution de travail est:

getListView().setSelectionFromTop(0, -mHeader.getHeight());

et

getListView().scrollTo(mOffset)

Cela fonctionne également, avec un décalage à droite (calculé en fonction de la position de défilement actuelle), mais peut vous donner des résultats inattendus.

14
Sver

Si vous souhaitez que la vue de liste défile toujours en bas, même lorsque vous mettez à jour la vue de liste de manière dynamique, vous pouvez ajouter ces attributs dans la vue de liste elle-même.

Android:stackFromBottom="true"
Android:transcriptMode="alwaysScroll"
38

utilisez le suivant

    lv.setSelection(adapter.getCount() - 1);
19
WISHY

Si vous souhaitez avoir une animation de défilement par programmation, vous pouvez facilement faire défiler vers le bas de la liste en utilisant:

listView.smoothScrollToPosition(adapter.getCount());

le défilement vers le haut de la liste peut être réalisé en utilisant:

listView.smoothScrollToPosition(0);
11
Aryo

Essayez celui-ci .. il résoudra votre problème, je l'ai essayé et cela fonctionne très bien.

   listView.post(new Runnable(){
             public void run() {
             listView.setSelection(listView.getCount() - 1);
    }});
3
Steve
private void scrollMyListViewToBottom() {
    myListView.post(new Runnable() {
        @Override
        public void run() {
            // Select the last row so it will scroll into view...
            myListView.setSelection(myListAdapter.getCount() - 1);
        }
    });
}

Ça marche pour moi

2
Pradip

J'ai eu le même problème, cela fonctionne mieux pour moi

listView.setSelection(listView.getAdapter().getCount()-1);
1
Usman Shaikh

Vous voudrez peut-être essayer myListView.smoothScrollToPosition(myListView.getCount() - 1). De cette façon, vous n'êtes pas obligé de sélectionner la dernière ligne. De plus, vous obtenez un beau défilement fluide! (:

1
Hunter S

Utilisez ce qui suit et essayez.

listview.setSelection (adapter.getCount () - 1);

1
Pratik Dasa

s'il n'y a pas d'adaptateur défini sur votre ListView, il n'a aucun enfant du tout, la vue vide n'est pas un enfant de votre ListView

0
pskink