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.
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"
utilisez le suivant
lv.setSelection(adapter.getCount() - 1);
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);
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);
}});
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);
}
});
}
J'ai eu le même problème, cela fonctionne mieux pour moi
listView.setSelection(listView.getAdapter().getCount()-1);
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! (:
Utilisez ce qui suit et essayez.
listview.setSelection (adapter.getCount () - 1);
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