2012-12-24 4 views
2

J'ai un listview personnalisé en utilisant un adapter qui a une couleur de fond alternée. Le problème est que les textes qui sont des chaînes (plus de 100 + de chaînes) sont mis à la couleur de Color.BLACK mais dans le listview les deux premières chaînes sont blanches et le reste est noir.Android ListView Texte Couleur blanc

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
    View view = super.getView(position, convertView, parent); 
    TextView tv = (TextView) super.getView(position, convertView, parent); 
    int colorPos = position % color.length; 
    tv.setTextColor(Color.BLACK); 
    view.setBackgroundColor(color[colorPos]); 
    return view; 
} 

Je ne peux pas détecter le problème pourquoi les premiers sont blancs alors que les autres sont noirs, est-il quelque chose à avec le chargement ou quelque chose? parce que mon texte (les cordes), ils sont plus de 100

MISE À JOUR

Voici le code ListView:

MyAdapter adapter = new MyAdapter(this, 
    android.R.layout.simple_list_item_1, 
    Strings.Advices); 
setListAdapter(adapter); 

Et les cordes:

public class Strings { 
    public static String Advices[] = { 
     "advice", 
     "advice", 
     "adc", 
     "add", 
    }; 
} 
+0

Où est votre code liste de lecture et tableau? J'ai besoin de voir ça. – DrinkJavaCodeJava

+0

Pourquoi appelez-vous 'getView' deux fois? Pourquoi supposez-vous que 'getView' vous donnera une vue valide? –

+0

@DrinkJavaCodeJava J'ai mis à jour la question. –

Répondre

3

Votre TextView-t rien. Généralement, vous devez utiliser findViewById() pour localiser le TextView dans la disposition de votre rangée. Puisque vous utilisez android.R.layout.simple_list_item_1 qui est un TextView lui-même, nous pouvons sauter cette étape:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    View view = super.getView(position, convertView, parent); 
    TextView tv = (TextView) view; 
    int colorPos = position % color.length; 
    tv.setTextColor(Color.BLACK); 
    view.setBackgroundColor(color[colorPos]); 
    return view; 
} 

Mais la méthode getView() d'un adaptateur intégré est très générique, à cet effet lent ... Vous devriez écrire votre propre prendre l'avantage du recycleur de l'adaptateur et du concept ViewHolder. S'il vous plaît regarder ce Google Talk Turbo Charge Your UI (et/ou le World of ListView) pour vous aider à écrire un adaptateur efficace.

Le problème est que le texte qui sont des chaînes (plus de 100+ de chaînes) sont réglées sur la couleur de Color.BLACK mais dans le listview les deux premières chaînes sont blancs et le reste sont noirs

Je suppose que ce changement se produit lorsque vous faites défiler le ListView, c'est directement lié à la façon dont le recycleur View se comporte.

+0

Désolé, mais comment puis-je utiliser findViewById() lorsque les chaînes n'ont pas d'ID? –

+0

Lorsque je fais défiler la liste, les chaînes deviennent noires comme je le voulais Color.BLACK –

+0

Ok, j'ai remarqué que vous utilisez 'simple_list_item_1.xml' qui est juste un TextView, donc nous pouvons simplement transformer la vue en TextView. (Sinon, vous pouvez utiliser l'ID 'android.R.id.text1'.) J'ai mis à jour ma réponse. – Sam