Ceci est un scénario très courant: affichant des images dans une liste de liste qui doivent être téléchargées à partir d'Internet. P>
En ce moment, j'ai une sous-classe personnalisée de Arrayadapter que j'utilise pour la liste de liste. Dans ma mise en œuvre de My GeveView () de l'arrayadapter, j'apparais un fil séparé pour charger une image. Une fois le chargement terminé, il lève les yeux sur l'image de l'image appropriée et définit l'image avec imageview.setimagedimagedrable (). Donc, la solution que j'ai utilisée est une sorte de similaire à celle-ci: Charge paresseuse d'images à ListView P>
Le problème que j'ai, c'est que dès que je prends l'appel à SetItimagedrable () sur ImageView, la liste d'envoi d'une autre rafraîchit toutes les lignes actuellement visibles de la liste! Cela se traduit par une sorte de boucle infinie: p>
Aussi loin que possible, la solution proposée dans "Android - Comment puis-je faire une charge paresseuse d'images dans ListView" (voir le lien ci-dessus) ne fonctionne tout simplement pas. On pourrait ressembler à cela, mais cela fonctionnera très lentement car en arrière-plan, il conserve le rechargement des lignes actuellement visibles. p>
Quelqu'un a-t-il rencontré cela avant et / ou avoir une solution pour cela? P>
4 Réponses :
dans la solution liée, une vue n'a pas d'introduction si Si vous réutilisez des machines à sous, vous avez des vues Vous devez aller plus loin et gérer l'état. Si vos points de vue ont une variable de membre stockant l'URL, et un booléen à dire s'il est chargé, il serait facile de savoir s'il faut appeler Je spéculerais que le document En outre, votre GeveView () sur une ligne visible doit garantir que ceux qui ne sont plus visibles sont déchargés, pour empêcher l'épuisement de la mémoire. Une finesse serait de déplacer les images plus visibles aux références douces (donc elles sont déchargées lorsque la mémoire est nécessaire) comme une autre affiche sur le fil d'origine noté. P> fetchdrawableoNeDread () code> ne doit être appelé que si la vue ne possède pas déjà le bon dessinable. p>
getdrawable () code> retourne null. p>
fetchdrawableoreadhead () code> ou non, par exemple. P >
TOSTRING () CODE> Détail de la trajectoire est détaillé sur lequel l'image a été chargée. (Si ce n'est pas le cas, vous pourriez la sous-classement que le pouliage est retourné pour le faire ainsi). Dans ce cas, vous pouvez éviter le booléen décrit ci-dessus et simplement faire une comparaison pour déterminer si c'est le droit amusant ou s'il faut chercher un remplaçant. P>
Oui, j'utilise une carte pour mettre en cache les images. Mais cela n'a pas d'importance, puisque j'appelle toujours toujours stitimagedrable () qui déclenche à nouveau l'actualisation. Si je pouvais en quelque sorte désactiver le reflet, cela résoudrait mon problème. Je n'utilise pas encore Softreferences (mais je le ferai), mais c'est juste une optimisation de la mémoire, cela ne résout pas la boucle infinie
Bon point que j'ai mal compris ce que vous vouliez dire par 'thread est généré par charger i> image'. Je vais réécrire ma réponse
Merci pour vos réponses rapides :) Qu'est-ce que vous décrivez maintenant résout le problème lorsque vous ne réutilisez pas les vues d'affichage des lignes comme je le fais. Avec la réutilisation des lignes, je veux dire en utilisant l'argument "ConvertView" qui est donné à GeveView (). Connaissez-vous une solution pour cela lors de la réutilisation des vues en ligne? (Parce que dans ce cas, vous devez appeler la séminage () à chaque fois)
J'ai utilisé le code dans le lien suivant: Une autre question Stackoverflow
J'ai fait de petits changements afin de résoudre le problème de la vue de recyclage. Le code suivant contient ma solution qui résout le problème du recyclage: p>
J'ai eu le même problème.
Après presque 2 jours de débogage intensif / optimisant et d'essayer de comprendre, pourquoi mon 1) étendre un 2) dans ce 3 3) sale, mais pour moi ça marche p> 4) profit;) p> p> grevView () code> est appelé à toutes les vues encore et encore lorsque vous utilisez
SETITIMAGEBITMAP () CODE> D'une ligne, je suis arrivé à une solution sale: p>
imageview code> que vous utilisez pour toutes les images dans Votre liste p>
imageview code> écrase la méthode p>
Lorsque des images sur la liste ont la même taille et votre image d'image est également une taille fixe (ne pas envelopper le contenu). Cela m'a aidé, merci :)