2010-11-17 3 views
0

J'ai besoin d'aide pour exécuter la tâche de mise en jachère. quelqu'un peut-il aider à régler cela?Comment lier l'objet (données) et ViewHolder (listview row) dans android?

J'ai une vue en liste. chaque ligne contient

  1. Titre (Textview)
  2. sous titre (TextView)
  3. Barre de progression
  4. nombre de progrès (TextView)
  5. Télécharger/Annuler (ToggleButton)

tout adaptateur de chargement j'ai passé la liste. d'où affiche le titre, sous-titre pour chaque ligne.

Voici le code myadapter, générant des vues pour chaque ligne.

Mon problème est que. En cours d'exécution quand je suis entré bouton de téléchargement, il va à downloadQueue à télécharger, et met à jour la barre de progression respective. Mais quand je suis en train de faire défiler la liste, la barre de progression est visible pour l'autre ligne à la place de la rangée actuelle où j'ai commencé le téléchargement. Quelqu'un peut-il me dire comment lier la vue et l'objet d'état afin qu'il ne dérange pas la barre de progression.

`

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     final int pos= position; 
     final StateViewHolder viewHolder; 
     final State state = stateList.get(pos) ; 
     if (convertView == null) { 
      inflater = LayoutInflater.from(context); 
      convertView = inflater.inflate(R.layout.adapter_view, null); 
      TextView title = (TextView) convertView.findViewById(R.id.text); 
      TextView subTitle = (TextView) convertView.findViewById(R.id.subText); 
      TextView progresstext = (TextView) convertView.findViewById(R.id.progressText); 
      ProgressBar progressBar = (ProgressBar) convertView.findViewById(R.id.progress); 
      ImageView cancel = (ImageView) convertView.findViewById(R.id.cancel); 
      ImageView download = (ImageView) convertView.findViewById(R.id.download); 
      viewHolder = new StateViewHolder(title, subTitle, progresstext, download, cancel, progressBar); 
      hashMap.put(state, viewHolder); 
      convertView.setTag(viewHolder); 
      Log.i("DownloadAdapter", "InGetView"); 
     }else{ 
      viewHolder = (StateViewHolder)convertView.getTag(); 
     } 
     state.setViewHolder(viewHolder); 
     viewHolder.getDownload().setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        viewHolder.getDownload().setVisibility(View.GONE); 
        viewHolder.getCancel().setVisibility(View.VISIBLE); 
        Log.i("DownloadAdapter", ""+state.getName()); 
        DownloadQueue.addToQueue(state); 
       } 
      }); 
     viewHolder.getCancel().setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        viewHolder.getCancel().setVisibility(View.GONE); 
        viewHolder.getDownload().setVisibility(View.VISIBLE); 
        DownloadQueue.RemoveFromQueue(state); 
       } 
      }); 

     viewHolder.getTitle().setText(state.getName()); 
     viewHolder.getSubTitle().setText(state.getEffective()); 
     return convertView; 
    } 
} 

Remerciant vous, Srinivas

`

+0

Hii, Srinivas !! S'il vous plaît donnez-moi une adresse e-mail. mon adresse gmail [email protected] – crickpatel0024

Répondre

0

Lorsque vous utilisez un support en vue de réutiliser votre point de vue de la ligne, alors vous devez définir explicitement toutes les vues à chaque fois. En d'autres termes, vous devez définir chaque élément de cette ligne, y compris votre titre, sous-titre, l'affichage du texte du compte de progression, la barre de progression, et télécharger la bascule de la vue Image. Ce que vous voyez est quand une rangée définit la barre de progression comme visible, une autre rangée peut être réutiliser cela (ainsi vous verriez la barre de progression sur cette rangée aussi). Vous devez donc définir explicitement la barre de progression pour qu'elle ne soit pas visible pour les lignes qui ne sont pas téléchargées.

Donc, au fond de votre méthode de getView, assurez-vous que la logique de définir chaque point de vue:

viewHolder.getTitle().setText(state.getName()); 
viewHolder.getSubTitle().setText(state.getEffective()); 
viewHolder.getProgressBar().setVisibility(isImageDownloading); 
viewHolder.getProgressCount().setText("example"); 
+0

Merci pour votre solution. Lorsque je télécharge un fichier depuis asynctask, onpreExecute, je mets la barre de progression Visible, en utilisant viewholder (je suis en train d'enregistrer le viewholder pour chaque état). problème est que supposons d'abord est le téléchargement puis défiler vers le bas, la première barre de pogress est devenue invisible bien que son fonctionnement. – Srinivas

Questions connexes