2013-03-18 3 views
2

J'ai une liste personnalisée et chaque ligne montrant l'image et le texte et l'image doit être téléchargée à partir du serveur.Téléchargement Image uniquement pour la ligne visible dans la vue de liste

J'ai donc personnalisé mon adaptateur et dans cette méthode getView j'ai démarré une tâche asyn pour télécharger l'image.

Mais le problème est que s'il y a 50 éléments de la liste alors si je fais défiler du 1er au 50 point e dans la liste d'un seul coup,

alors pour chaque ligne, il va commencer le téléchargement des images quel que soit mince que la ligne est même pas montré ...

alors quelle pourrait être la solution pour cela ???

Toute aide serait très appréciée

Merci

Répondre

0

C'est un problème bien connu. Lisez Lazy Image Loading et trouvez des problèmes similaires. Une solution de contournement rapide pour vous - Je suggère de télécharger des images sur ThreadExecutor avec par exemple max 4 threads et d'annuler toutes les tâches qui ne sont plus nécessaires. Lorsque vous utilisez convertView - vous pouvez attacher une tâche à une vue avec setTag (asyncTask) et l'annuler quand une nouvelle arrive. Vous pouvez également utiliser le cache LRU pour stocker certaines images et ne pas les charger chaque fois que vous faites défiler votre liste.

-1

getView est seulement appelé pour les lignes visibles. Donc, si vous lancez le téléchargement, il ne téléchargera que les vues affichées. Remarque: N'appelez jamais vous-même getView d'un adaptateur, vous provoquerez les problèmes majeurs listView.

+0

Je suppose que je n'ai pas compris votre solution .... s'il vous plaît aidez-moi avec cela .... Comme je défile, chaque ro est visible pour nous alors obtenir la vue devrait être appelée et le téléchargement devrait commencer là-dessus. .... donc si vous allez au 50ème article alors ...... –

+0

Eh bien, si vous faites défiler vous allez mettre chaque rangée à mesure qu'elle devient visible. C'est le comportement attendu. Si vous ne faites pas défiler, vous ne pourrez pas déclencher ces demandes. C'est un comportement attendu - lorsque vous faites défiler, vous voulez obtenir ces images, n'est-ce pas? Si votre problème est que les anciennes requêtes sont toujours là, vous devez vous rearchitecter pour utiliser un thread d'arrière-plan (au lieu de tâches asynchrones) pour effectuer le téléchargement, et l'ignorer si la position n'est pas visible . –

+1

Oui maintenant je l'ai compris clairement, je suppose qu'il y a maintenant API dans listview.isRowVisible ..... il y a API pour la première et la dernière ligne visibiity .... donc est-ce un bon moyen startDownloadingImage() { fil de sommeil pendant 1 sec vérifier si thisRow se situe entre firts de ligne visible et dernière rangée visible si oui -> démarrer le téléchargement rien d'autre .... S'il vous plaît suggérer le cas échéant meilleure façon THanks –

Questions connexes