je trouve une solution. Je ne sais pas si c'est trop élégant, mais ça marche, ça va partir, à moins que quelqu'un ne trouve quelque chose de mieux.
La vue que je veux faire défiler avec la liste est une vue personnalisée, qui doit connaître l'affichage de la liste. Donc, je mets en œuvre une setListView (ListView listView) Méthode sur elle:
private int scrollY; //1
private Map<Integer, Integer> listViewItemHeights = new Hashtable<>();
public void setListView(final ListView listView) {
listView.setOnScrollListener(new OnScrollListener() { //2
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {} //3
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { //4
View c = listView.getChildAt(0);
if (c != null) {
int oldScrollY = scrollY;
scrollY = -c.getTop();
listViewItemHeights.put(listView.getFirstVisiblePosition(), c.getHeight());
for (int i = 0; i < listView.getFirstVisiblePosition(); ++i) {
if (listViewItemHeights.get(i) != null)
scrollY += listViewItemHeights.get(i);
}
scrollBy(0, scrollY - oldScrollY);
}
}
});
}
Commentaire n ° 1: ceci est une variable me permettant de garder la trace de la position actuelle du défilement.
Commentaire n ° 2: la fixation d'un nouveau sur écoute de défilement pour laisser mon point de vue personnalisé savoir quand la liste
Commentaire n ° 3: il n'a pas besoin d'être mis en œuvre dans ce cas.
Commentaire n ° 4: c'est là que la magie se produit. Notez à la fin je défile ma vue par scrollY - oldScrollY, laissez-moi commencer par ce bit en premier. oldScrollY est la position de défilement maintenue, scrollY est la nouvelle. J'ai besoin de faire défiler la différence entre eux. En ce qui concerne la façon dont scrollY est calculé, je vous renvoie à ma réponse ici: Android getting exact scroll position in ListView, c'est ainsi que la position de défilement est calculée en vue liste.
Salut, merci pour votre réponse. J'ai besoin que les lignes du haut de la liste soient marquées, donc je ne peux pas mettre cette vue dans l'en-tête. – Maria
vous pouvez réaliser par la création de deux mise en page personnalisée et pour un premier positon.bind première mise en page et deuxième mise en page pour tout repos .. de sorte que vous devez ajouter valus nécessaire dans ce tableau que vous lier dans baseadapter –
La chose est que je ne suis pas nécessaire veulent que le timbre apparaisse au-dessus de la première position. Les hauteurs des rangées peuvent être différentes dans ma liste et le timbre peut traverser les trois premiers. – Maria