Question

Je sais qu'il est en quelque sorte possible de créer un ListView qui charge plus de données lorsque l'utilisateur a atteint le bas de la liste. Cependant, je travaille avec un ScrollView, dans lequel j'ai un LinearLayout, et ces deux composants fonctionnent très bien avec le défilement, etc. Mais je ne sais pas comment je suis censé faire pour obtenir un parchemin infini.

Je suppose que je dois ajouter quelque chose qui lit ce qui est montré du LinearLayout à l'écran, et quand il calcule que c'est le bas du LinearLayout qui est affiché (en utilisant la position actuelle et la hauteur de la vue ), il déclenche un événement.
Mais comme je l'ai dit, je ne sais pas comment y parvenir. Donc, si quelqu'un peut m'aider, je serais très reconnaissant.

EDIT: J'ai trouvé ce post ici sur StackOverflow Comment déclencher un événement lorsque scrollView atteint le bas avec Android? , mais je ne sais pas quoi faire avec la réponse:

Compte tenu des exigences, vous allez probablement étendre BaseAdapter (par opposition à CursorAdapter qui utilise un mécanisme différent).

Voici un extrait pour cela:

public View getView(int position, View convertView, ViewGroup parent) {
    if (position == backingLinkedList.size()) {
        //get more items and add them to the backingLinkedList in a background thread
        notifyDataSetChanged();
    }
}
Était-ce utile?

La solution

Si vous pouvez déclencher un événement lorsque vous atteignez le bas d'une vue déroulante, vous pouvez essayer de créer votre propre type de vue pour contenir vos données.Lorsque vous atteignez le bas de la vue, chargez les données suivantes dans votre classe de vue et ajoutez-les dans la disposition de la vue de défilement.

Donc, en gros, créez une classe qui contient une section de ce que vous montrez.Ajoutez le premier dans la vue de défilement.Lorsque vous touchez le bas, créez une autre vue contenant vos prochaines données et utilisez scrollviews_layout.addview(view_holding_the_new_data)

Autres conseils

Je sais que cela a été résolu il y a longtemps, mais je voulais partager ma solution pour les futurs scrollers infinis.

J'ai utilisé la méthode onScroll dans le OnScrollListener pour déclencher un thread d'arrière-plan pour saisir plus de données et adapter.notifyDataSetChanged pour notifier au ListView plus de données à charger et créer un défilement infini.Pour une raison quelconque, onScrollStateChanged ne se déclenchait pas, mais onScroll a fait ce dont j'avais besoin, donc je n'ai pas eu à m'inquiéter.

Pendant très longtemps, je n'ai pas compris comment empêcher le ListView de se recharger et de me remettre en haut de la liste, mais j'ai ensuite réalisé que je n'avais besoin que d'initialiser un nouvel adaptateur et d'appeler setListAdapter une fois, et à chaque foisaprès cela, appelez uniquement notifyDataSetChanged.Avant, j'appelais aussi setListAdapter, me replaçant ainsi en haut.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top