2011-03-09 7 views
2

Je m'excuse d'avance car je suis loin de mon ordinateur portable et ne peux pas produire d'exemples de code, mais j'espère que je peux être assez clair pour avoir une réponse à ma question. J'ai un ListView soutenu par un sqlite db (via un SimpleCursorAdapter). J'essaye d'implémenter la fonctionnalité ainsi la liste montre seulement un certain nombre d'éléments de la requête de DB à la fois. Je l'ai fait en chargeant toutes les données à partir de la base de données dans onCreate, et en remplaçant la méthode getCount de SimpleCursorAdapter avec le # préféré des éléments lorsque la liste est lancée. J'ai aussi un bouton qui charge plus d'éléments à la liste. Ceci est fait en mettant à jour le compte que getCount devrait renvoyer.Android SimpleCursorAdapter - Limiter les résultats ListView

Cela fonctionne très bien en ajoutant plus de lignes listview, mais je vois un comportement étrange avec le contenu de ma liste après avoir cliqué sur le bouton. Je vois des éléments de liste en double et des contenus d'éléments incorrects, qui sont définis dans ma méthode bindview. Je suppose que cela a quelque chose à voir avec le remplacement de la méthode getCount (je suis sûr que c'est une meilleure façon de faire une fonction "Load Next 25"), car je ne vois pas ce comportement quand je montre tout l'ensemble des résultats. et ne remplace pas cette méthode.

Je suppose que ma question est peut-on remplacer la méthode getCount par un comportement amusant dans la méthode bindview quand vous traitez un SimpleCursorAdapter? Quelle est la meilleure façon d'implémenter ce type de fonctionnalité avec des résultats de requête db sauvegardant votre ListView?

Merci d'avance ... si nécessaire, je peux fournir des extraits de code demain quand je suis de retour à mon ordinateur portable.

+1

Je ne recommande pas cela. Que se passe-t-il si la base de données contient moins de # entrées? Je suppose que cela peut conduire à un comportement imprévisible. J'irais avec la solution de Flo. – spa

Répondre

5

Je pense que vous pouvez archiver ceci en utilisant simplement une requête différente pour obtenir des résultats. SQLite prend en charge un LIMIT operator qui peut renvoyer les n premiers résultats d'une requête.

Donc, votre première requête ressemble à ceci: SELECT [your columns] FROM [your table] LIMIT 25

Et lorsque le bouton qui charge les 25 résultats suivants est pressé, vous créez une nouvelle requête avec une limite de 50 et de lier le curseur résultant à l'SimpleCursorAdapter en utilisant la méthode changeCursor().

+0

Merci beaucoup pour votre aide! J'essayais de travailler dans les limites de l'appel db.query() qui ne permet pas un paramètre LIMIT, mais j'ai négligé d'utiliser simplement la méthode execSQL() avec une instruction SQL directe. Je vais faire ce changement dans mon code, merci encore! Une question de suivi rapide ... si j'utilise cette approche, le ListView va-t-il commencer à partir des premiers résultats du curseur? En d'autres termes, le ListView défilera-t-il automatiquement vers le haut ou laissera-t-il l'utilisateur à proximité de ListView et le bouton «Next x» sera-t-il enfoncé pour voir les nouveaux enregistrements? –

+0

De rien. En ce qui concerne votre deuxième question, je ne sais pas comment la liste va réagir, mais je suis sûr qu'il y a un moyen de laisser la liste défiler jusqu'au dernier élément avant la nouvelle requête. Bien que je ne les ai jamais utilisés avant les méthodes setSelection() et setSelectionAfterHeaderView() de la classe ListView semblent très prometteurs pour ce problème. – Flo

+0

Ok, je vais jeter un oeil à ces méthodes. Merci. –

Questions connexes