2010-11-10 6 views
0

J'ai créé un ArrayAdapter personnalisé pour afficher des données dans des éléments ListView à partir d'un tableau de structures de données et pour une raison quelconque, lorsque je défile très rapidement, l'affichage va faire des choses étranges.Les éléments ListView ne sont pas actualisés correctement

Voici ma fonction getView de l'ArrayAdapter personnalisé. Ma première supposition serait à cause de la si (d.highTemp! = Null) est à la traîne ou quelque chose? Ce que je veux que l'adaptateur fasse est seulement d'afficher un highTemp si la structure de données a une valeur dedans. Sinon, il devrait afficher la valeur lowTemp; La liste est correcte lorsque d'abord dessiné mais si je fais défiler de haut en bas très vite, il affiche les valeurs élevées et lowTemp même si je sais que chaque structure de données n'a qu'un seul de ceux-là! = Null ...

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
     View v = convertView; 
     if (v == null) { 
      LayoutInflater vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v = vi.inflate(R.layout.list_item, null); 
     } 
     DaysWeather d = daysWeather[position]; 

     if (d != null) { 
       TextView tt = (TextView) v.findViewById(R.id.toptext); 
       TextView bt = (TextView) v.findViewById(R.id.bottomtext); 
       TextView trt = (TextView) v.findViewById(R.id.toprighttext); 
       TextView tbt = (TextView) v.findViewById(R.id.bottomrighttext); 

       if (tt != null) { 
         tt.setText(d.name);} 
       if(bt != null){ 
         bt.setText(d.shortDescription); 
       } 
       if (d.highTemp != null){ 
        if (trt != null) { 
         trt.setText("Hi: " + d.highTemp); 
         tbt = null; 
        } 
       } else { 
        if (tbt != null) { 
         trt = null; 
         tbt.setText("Lo: " + d.lowTemp); 

        } 
       } 
     } 
     return v; 
} 

Répondre

0

Comme vous réutilisez une vue de ligne donnée, cette ligne peut déjà avoir l'affichage du texte Salut temp, vous devez donc définir explicitement le champ que vous ne voulez pas une chaîne vide (ou cachée).

Vous devez faire quelque chose comme ceci:

if (d.highTemp != null) { 
    if (trt != null) { 
     trt.setText("Hi: " + d.highTemp); 
     tbt.setText(""); //set this field to blank 
     tbt = null; 
    } 
} else { 
    if (tbt != null) { 
     tbt.setText("Lo: " + d.lowTemp); 
     trt.setText(""); //set this field to blank 
     trt = null; 
    } 
} 
+0

Ça l'a fait! J'ai déjà essayé 'tbt = null' et 'trt = null' et cela ne fonctionnait pas, mais en utilisant un setText vide l'a fait !, Merci beaucoup. – joepetrakovich

1

U essayer avec l'adaptateur de curseur ...... il vl wrk mieux ......

+0

Je vais voir, ma première hypothèse était que cursorAdapters étaient pour les données de base de données stockées, que j'ai aucune expérience dans quelle qu'elle soit. Je vais y réfléchir cependant, merci. – joepetrakovich

Questions connexes