2010-12-03 5 views
1

J'ai un problème étrange. Je suis en train de la couleur de fond des éléments d'un listview comme ceci:Couleur de fond recyclé dans ListView

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View row = convertView; 

    ... 

    if (status == true) { 
     row.setBackgroundColor(Color.argb(255,0,85,187)); 
    } 
    else { 
     if (morestuff) { 
      row.setBackgroundColor(Color.argb(128,255,0,0)); 
     } 
    } 

    ... 
} 

Cela semble fonctionner. Toutefois, lorsque je défile sur la liste, puis de retour, certaines lignes ont acquis une couleur d'une autre ligne sans être définies par ce code. Je soupçonne que le listview recycle les vues en tant qu'optimisation.

Comment puis-je résoudre ce problème?

Répondre

1

Le getView sera appelé tout le temps lorsque la liste est dessinée. Il suffit de le prendre quand nous faisons un petit exemple de changement faire un petit parchemin
Si vous souhaitez définir la couleur à une ligne spécifique, il suffit de le faire en vérifiant le position (Premier argument de getview).

1

La vue en liste regroupe les vues en tant qu'optimisation. Vous devriez regarder l'exemple de vue de liste efficace pour des idées.