2010-12-01 4 views
0

Je ma demande je besoin d'une liste d'articles, où chaque élément contientAndroid: Est-il préférable de choisir ViewwGroup puis ListView pour les cas ci-dessous dans Android?

  1. TextView
  2. ProgressBar
  3. bouton Télécharger
  4. bouton Annuler

chaque fois que je clique sur le bouton de téléchargement progressBar démarre et exécute son amende. . J'ai lié chaque vue de ligne à mon objet de données. Dans la tâche de téléchargement i.e; asynctask suis en utilisant cette vue pour mettre à jour. Mais quand je suis en train de faire défiler la liste, la progression est visible à la ligne differnt puis à la ligne réelle. Je ne connais pas la raison? Donc, j'ai décidé d'éviter listview et d'aller en créant Viewgroup, puis en ajoutant toutes les vues linéairement à ces vues. (Mais je donne comment manipuler OnclickListens pour le téléchargement, le bouton et le bouton d'annulation) Est-ce bon moyen ou n'importe quelle autre manière possible de faire? rôle de performance? Quelqu'un peut-il m'aider s'il vous plaît?

vous Remerciant,

Srinivas

Répondre

0

Android réutilise fortement vues qui composent chaque fente de votre ListView. Au fur et à mesure que vous faites défiler ces vues, vous réutilisez encore et encore, vous devez donc vous occuper de réaffecter le statut de progrès correct à vos éléments cachés/visibles

Dit que je déconseillerais de créer plus d'un ou deux AsyncTask depuis que vous va sûrement étouffer le système avec trop de threads.

+0

J'utilise une seule tâche asynchrone. – Srinivas

+0

La raison pour laquelle votre barre de progression est visible dans la ligne différente est que le système d'exploitation dispose d'un pool de vues qu'il réutilise pour peindre une partie visible de la liste. Voici un bon exemple sur la façon d'utiliser ViewHolder pour faire face à ce problème http://goo.gl/nocur – Bostone

1

Quelle est la longueur de votre liste?

Si < 10 articles (au tour, vous devez vérifier). Je passer de ListView à

  • ScrollView
    • LinearLayout
      • Point 1
      • Point 2
      • Article 3

où chacun de vos articles contient les articles etc. Et il est encore défilement.

Ensuite, je joindre un TAG à chaque item et utiliser la balise dans un gestionnaire onClick:

public void handleClick(View v) { 
    // use v.getTag(); 
} 

Tag vous pouvez définir en XML via android:tag="1234" ou dans le code.

Si vous savez ce qu'est votre ViewParent (quelle classe), vous pouvez également le CAST à la classe appropriée et obtenir le "tag" à partir de là.

+0

Ma liste est dynamique je veux dire. Les 7 premiers éléments contiennent chacun un bouton, quand je clique. La liste se développe avec d'autres ensembles de lignes. – Srinivas

+0

Étant donné la nature dynamique de votre programme, je serais toujours d'accord avec mon idée. Comme Listview recycle les vues tout le temps, il serait fastidieux de restaurer le statut de chaque élément tout le temps. Et si vous n'êtes pas si longtemps, vous pourriez ne pas avoir un énorme problème de performance. –