ListView - getView é chamado muitas vezes

Sei que existem poucas perguntas sobre esse problema do 'getView chamado algumas vezes', mas meu problema é um pouco diferente.

Eu tenho um listView personalizado com linha personalizada (usei um row_layout.xml). Geralmente funciona bem. No começo, tive um problema com várias chamadas para getView e foi corrigido usando um dos métodos que vi aqui no stackoverflow. (usando a matriz 'usedPositions').

agora, vejo nos logs este cenário: getView pos 0, getView pos 1, getView pos 0, getView pos 1. Isso fez com que minhas linhas fossem duplicadas. Isso acontece apenas quando ligo para uma nova atividade que cubra a atividade atual e depois a fecho. (por exemplo, abra a atividade da câmera e feche-a).

Mostrarei meu código:

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;
}

Pode me dizer o que há de errado?

questionAnswers(2)

yourAnswerToTheQuestion