ListView - getView вызывается слишком много раз

Я знаю, что есть несколько вопросов относительно этой проблемы 'getView, вызванного несколько раз', но моя проблема немного отличается.

У меня есть собственный listView с пользовательской строкой (используется row_layout.xml). Обычно это работает хорошо. Вначале у меня была проблема с несколькими вызовами getView, и она была исправлена с помощью одного из методов, которые я видел здесь в stackoverflow. (используя массив usedPositions).

теперь я вижу в журналах такой сценарий: getView pos 0, getView pos 1, getView pos 0, getView pos 1. Это привело к удвоению моих строк. Это происходит только тогда, когда я вызываю новое действие, которое охватывает текущее действие, а затем закрываю это действие. (например, откройте действие камеры, а затем закройте его).

Я покажу свой код:

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

Можете ли вы сказать мне, что не так?

Ответы на вопрос(1)

Ваш ответ на вопрос