11
votes

Comment charger la liste "en douceur" dans Android

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?


0 commentaires

5 Réponses :


10
votes

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> xxx pré>

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> xxx pré>

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);
}


0 commentaires

8
votes

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 convertview! = Null définit correctement toutes les données de la vue et tout devrait fonctionner correctement.

Vous voulez votre GeveView () méthode pour regarder à peu près ce qui suit si vous utilisez des vues personnalisées: xxx

Si vous n'utilisez pas votre propre vue personnalisée, remplacez simplement le Appelez à Nouveau MyCustomView () avec un appel à Inflatra.inflate (r.layout.my_layout, null)

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

De sa conversation et par ordre d'importance de ma propre expérience,

  • Utilisez ConverView
  • Si vous avez des images, n'édordiez pas vos images à la volée. Utilisez bitmap.createscaledbatimap pour créer un bitmap mis à l'échelle et mettre cela dans vos vues
  • Utilisez un titulaire de point de vue pour que vous n'ayez pas obligé d'appeler un tas de Findviewides () à chaque fois
  • Diminuez la complexité des vues de votre liste de vue. Moins de sous-espions, mieux c'est. Relativenelayout est beaucoup mieux à cela que, disons, linéarlayout. Et assurez-vous d'utiliser si vous implémentez des vues personnalisées.

2 commentaires

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!



1
votes

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();


0 commentaires

0
votes

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.


0 commentaires

1
votes

Un seul conseil: N'utilisez jamais de fond transparent de la mise en page d'élément - il ralentit des performances grandement


0 commentaires