2010-04-11 4 views
2

J'essaye d'implémenter la pagination dans un ListAdapter personnalisé. En ce moment je fais juste la demande pour la page suivante quand le dernier article dans le ListView devient visible, en vérifiant dans getView() si position est >= la taille de ListAdapter.getCount().ListView/ListAdapter pagination

Cela fonctionne très bien, mais je me demande s'il existe un meilleur moyen (ou un autre moyen) de faire la demande une fois que le dernier élément de la liste est réellement visible par l'utilisateur. Quelqu'un sait-il un moyen?

Répondre

4

Je fais presque de la même façon:

public static final int SCROLLING_OFFSET = 5; 
// ... 
private final ArrayList<T> items = new ArrayList<T>(); 
// ... 
if (SCROLLING_OFFSET == items.size() - position) { 
    if (hasNextPage()) { 
     addNextPage(); 
    } 
} 

private boolean hasNextPage() { 
    // basically calculates whether the last 2 pages contained the same # of items 
} 

private void addNextPage() { 
    // show spinner 
    // fetch next page in a background thread 
    // add to items 
    notifyDataSetChanged(); 
} 
0

Essayez de supprimer complètement la vérification. Dans mon expérience, getView() n'est appelé que lorsque l'entrée est sur le point de s'afficher.

+0

Vous ne savez pas ce que vous voulez dire. Le chèque doit être là, sinon il ferait la page chaque rangée? – synic

+0

Pls le décrire plus. – OneWorld

2

Je pense qu'il ya une meilleure façon de le faire. Implémentation de l'interface OnScrollListener. Jetez un oeil à ceci: Endless Scrolling ListView