2012-11-30 1 views
1

J'ai un adaptateur de liste personnalisé que j'essaie d'utiliser une mise en page avec une barre de progression.Android: adaptateur de liste personnalisée avec barre de progression

Mon problème est que, lorsque la vue est gonflée pour la première fois, je donne à la barre de progression une visibilité fausse. Lorsque vous cliquez sur l'élément, la visibilité de la barre de progression est définie sur true. Mais, si vous faites défiler la liste, les barres de progression de l'élément aléatoire deviennent visibles (en raison du recyclage de la vue?).

Des moyens faciles d'y remédier? Il s'agit en fait d'un code de preuve de concept. Ce n'est donc pas très joli. Mais, essayant juste de descendre l'idée pour que je puisse l'utiliser correctement.

+0

'en raison du recyclage de la vue?' Oui! vous devez suivre les éléments qui sont visibles/invisibles et les mettre à jour dans 'getView' –

+0

Vérifiez . – scout

Répondre

0

Vous avez raison. Comme la vue peut être recyclée et utilisée comme élément dans une autre position, vous devez toujours définir la visibilité de la barre de progression en fonction de la position dans getView. Utilisez AdapterView.OnItemClickListener au lieu de View.OnClickListener. Gardez une trace de la visibilité de la barre de progression en utilisant array.

public class AdapterItem 
    { 
     public Boolean IsInProgress; 
    } 

...  
    Public class CustomAdapter extends BaseAdapter 
    { 

     ArrayList<AdapterItem> _list = new ArrayList<AdapterItem>() 
     ... 

     public View getView(int position, View convertView, ViewGroup parent) 
     { 
      ... 

      if (holder != null && _list.size() > position) 
      { 
       AdapterItem item = _list.get(position); 

      holder.progressVisible = Item.IsInProgress ? View. VISIBLE : View.INVISIBLE 
      } 
     } 

     public void onItemClick(int position) 
     { 
      AdapterItem item = _list.get(position); 
      item.IsInProgress = !item.IsInProgress; 
     } 
    } 

    ... 

    listView.setOnItemClickListener(new OnItemClickListener() 
    { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
         int position, long id) { 

      CustomAdapter adpt = (CustomAdapter)parent.getAdapter(); 
      adpt.onItemClick(position); 
     } 
    } 
+0

où la _list est remplie? – androidevil

Questions connexes