Comment puis-je faire défiler par programme à une position spécifique dans une ListView
?
Par exemple, j'ai un String[] {A,B,C,D....}
et je dois définir l'élément visible le plus haut de la ListView
sur l'index 21 de mon String[]
.
Pour un défilement direct:
getListView().setSelection(21);
Pour un défilement lisse:
getListView().smoothScrollToPosition(21);
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 terminé
duration-> Nombre de millisecondes à utiliser pour le défilement
Note: De l'API 11.
La réponse de HandlerExploit était ce que je cherchais, mais ma liste de vues est assez longue et aussi avec alphabet scroller. Ensuite, j'ai trouvé que la même fonction peut prendre d'autres paramètres aussi :)
Edit: (suggestion de l'AFD)
Pour positionner la sélection actuelle:
int h1 = mListView.getHeight();
int h2 = listViewRow.getHeight();
mListView.smoothScrollToPositionFromTop(position, h1/2 - h2/2, duration);
Mettez votre code dans handler comme suit,
public void timerDelayRunForScroll(long time) {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
try {
lstView.smoothScrollToPosition(YOUR_POSITION);
} catch (Exception e) {}
}
}, time);
}
puis appelez cette méthode comme,
timerDelayRunForScroll(100);
À VOTRE SANTÉ!!!
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 la vue liste. (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
}
});
Le parchemin Listview
sera positionné en haut par défaut, mais vous voulez faire défiler s'il n'est pas visible, utilisez ceci
if (listView1.getFirstVisiblePosition() > position || listView1.getLastVisiblePosition() < position)
listView1.setSelection(position);
Manipulation du défilement de la liste à l’aide des boutons HAUT/Bas.
Si quelqu'un est intéressé par la gestion de la liste, affichez une rangée vers le haut/bas à l'aide du bouton. puis.
public View.OnClickListener onChk = new View.OnClickListener() {
public void onClick(View v) {
int index = list.getFirstVisiblePosition();
getListView().smoothScrollToPosition(index+1); // For increment.
}
});
Si quelqu'un recherche une fonctionnalité similaire à celle de l'application Gmail,
Le défilement Listview sera positionné en haut par défaut. Merci pour l'allusion. amalBit .. Il suffit de le soustraire. C'est tout.
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
int h1 = mDrawerList.getHeight();
int h2 = header.getHeight();
mDrawerList.smoothScrollToPosition(h2-h1);
}
}, 1000);
Si vous voulez sauter directement à la position désirée dans une listView, utilisez simplement
listView.setSelection (int position);
et si vous voulez passer facilement à la position souhaitée dans listView, utilisez simplement
listView.smoothScrollToPosition (int position);
c'est facile list-view.set selection (vous pos); ou vous pouvez enregistrer votre position avec sharedprefrenceand lorsque vous démarrez l'activité.
C'est ce qui a fonctionné pour moi. Combinaison de réponses par amalBit et Melbourne Lopes
public void timerDelayRunForScroll(long time) {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
public void run() {
try {
int h1 = mListView.getHeight();
int h2 = v.getHeight();
mListView.smoothScrollToPositionFromTop(YOUR_POSITION, h1/2 - h2/2, 500);
} catch (Exception e) {}
}
}, time);
}
puis appelez cette méthode comme:
timerDelayRunForScroll(400);
-Si vous voulez juste que la liste défile vers le haut\dawn à une position spécifique:
myListView.smoothScrollToPosition(i);
-si vous voulez obtenir la position d'un élément spécifique dans myListView:
myListView.getItemAtPosition(i);
-aussi ce myListView.getVerticalScrollbarPosition(i);
can peut vous aider.
Bonne chance :)