ListView - getView est appelé trop de temps

Je sais qu'il y a quelques questions au sujet de cette question de la " getView appelé à quelques reprises, mais mon problème est un peu différent.

J'ai un custom listView avec de ligne personnalisée ( utilisé une row_layout.xml).
Il fonctionne bien en général. Au début j'ai eu un problème avec les appels multiples à getView et il a été résolu en utilisant l'une des méthodes que j'ai vu ici dans stackoverflow. ( à l'aide de la "usedPositions' array).

maintenant, je vois dans les journaux de ce scénario: getView pos 0, getView pos 1, getView pos 0 , getView pos 1.
Ce la cause de mon rangées d'être doublé. Il ne se produit que lorsque j'appelle une nouvelle activité qui couvre l'activité en cours et fermez cette activité. ( par exemple, ouvrir l'activité de la caméra, puis le fermer).

Je vais vous montrer mon code:

public View getView(int position, View convertView, ViewGroup parent) {
//TODO Auto-generated method stub
View row = convertView;
Toast toast = Toast.makeText(this.context, "getView " + position, 1000);
toast.show();
String pos = Integer.toString(position);
if (!usedPositions.contains(pos)) { 
CardHolder holder = null;
if(row == null)
{
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new CardHolder();
//holder.imgIcon = (ImageView)row.findViewById(R.id.imgIcon);
holder.txtCouponTitle = (TextView)row.findViewById(R.id.txtTitle);
holder.txtBusinessName = (TextView)row.findViewById(R.id.txtBusinessName);
row.setTag(holder);
}
else
{
holder = (CardHolder)row.getTag();
}
Card card = data.get(position);
holder.txtCouponTitle.setText(card.couponTitle);
holder.txtBusinessName.setText(card.businessName);
//holder.imgIcon.setImageResource(card.icon);
TableLayout table = (TableLayout)row.findViewById(R.id.imagesTable); 
for (int r=1; r<=1; r++){ 
TableRow tr = new TableRow(this.context); 
for (int c=1; c<=10; c++){ 
ImageView im = new ImageView (this.context); 
im.setImageDrawable(this.context.getResources().getDrawable(c<= card.numberOfStamps ? R.drawable.stamp_red :R.drawable.stamp_grey)); 
im.setPadding(6, 0, 0, 0); //padding in each image if needed 
//add here on click event etc for each image... 
//... 
tr.addView(im, 40,40);  
} 
table.addView(tr); 
} 
//Your code to fill the imageView object content 
usedPositions.add(pos); //holds the used position 
} 
else
usedPositions.remove(pos);
return row;
}

Pouvez-vous me dire quel est le problème?

OriginalL'auteur Eran Tal | 2012-02-06