Je charge des données de curseur à ListView, mais ma liste de liste n'est pas vraiment affichée "lisse". Les données changent lorsque je traîne de haut en bas sur le scollier dans ma liste de liste. Et certains éléments ressemblent à un affichage en double dans ma liste. J'ai une "complexe listeView" (deux TextView, one imageview), donc j'ai utilisé NewView (), Bindview () pour afficher les données. Quelqu'un peut-il m'aider? P>
5 Réponses :
Je vais vous décrire comment obtenir un tel problème que vous avez. Peut-être que cela vous aidera.
Donc, dans l'adaptateur de liste Vous avez un tel code: p> Comme vous pouvez le constater, nous définissons la valeur de la liste de la liste seulement après avoir récupéré titulaire . p> Mais si vous déplacez le code dans ci-dessus si l'instruction: p> de sorte qu'il apparaît comme ci-dessous: P> if (contentView == null) {
holder = new ViewHolder();
contentView = inflater.inflate(R.layout.my_magic_list,null);
holder.label = (TextView) contentView.findViewById(R.id.label);
holder.label.setText(getLabel());
contentView.setTag(holder);
}
Listview est une bête délicate.
Votre deuxième question: vous voyez des doublons car ListView réutilise des vues via ConverView, mais vous ne vous assurez pas de réinitialiser tous les aspects de la vue convertie. Assurez-vous que le chemin de code pour Vous voulez votre Si vous n'utilisez pas votre propre vue personnalisée, remplacez simplement le Appelez à sur votre première question, vous "ll veut regarder Romain's TechTalk sur ListView Performances ici: http://code.google .Com / Événements / IO / Sessions / TurboChargeuiANDroindroidFast.html P> De sa conversation et par ordre d'importance de ma propre expérience, P> convertview! = Null code> définit correctement toutes les données de la vue et tout devrait fonctionner correctement. P> GeveView () code> méthode pour regarder à peu près ce qui suit si vous utilisez des vues personnalisées: p> Nouveau MyCustomView () Code> avec un appel à Inflatra.inflate (r.layout.my_layout, null) code> p>
Désolé, mais j'utilise NewView (), Bindview () pour afficher les données. Est-ce le même problème?
Je pense que je trouve quelque chose d'utile avec la vidéo, merci de partager!
Je suis également confronté à ce problème, mais dans mon cas, j'ai utilisé des threads pour récupérer les images externes. Il est important que le fil d'exécution actuel ne change pas l'imageView si elle est réutilisée!
final Handler handler = new Handler() {
@Override
public void handleMessage(Message message) {
// VERY IMPORTANT CHECK
if (urlString.equals(url))
imageView.setImageDrawable((Drawable) message.obj);
};
Thread thread = new Thread() {
@Override
public void run() {
Drawable drawable = fetchDrawable(urlString);
if (drawable != null) {
Message message = handler.obtainMessage(1, drawable);
handler.sendMessage(message);
}
}};
thread.start();
Vous pouvez voir le texte de réocoure dans plusieurs rangées si vous le gérez dans le mauvais sens. J'ai un peu blogué à ce sujet récemment - voir ici < / a>. Autre que vous voudrez peut-être jeter un coup d'œil à Optimisation de la performance de liste de réception . Généralement, c'est à cause de la réutilisation de la vue et je l'ai déjà vu plusieurs fois. P>
Un seul conseil: N'utilisez jamais de fond transparent de la mise en page d'élément - il ralentit des performances grandement p>