自定义ListView中的三个第一个元素将重复并在滚动时更改位置

时间:2016-06-24 09:41:39

标签: java android listview

我有一个自定义ListView,当我显示它时,我得到3个第一个元素,当我滚动时它们会重复。所有其他元素永远不会显示。

我尝试使用setTaggetTag,但它不起作用。我找到的唯一方法是每次滚动一个元素时重建视图(禁用if (row = null)),但我认为这不是一件好事。

这是我的getView方法(包含setTaggetTag):

@Override
public View getView(int position, View convertView, ViewGroup parent) {


        View row = convertView;
        Meal meal =  getItem(position);

        if (row == null) {
            holder = new ViewHolder();
            row = LayoutInflater.from(getContext()).inflate(R.layout.custom_list, parent, false);
            holder.txtTitle = (TextView) row.findViewById(R.id.nameMeal);
            holder.img = (ImageView) row.findViewById(R.id.imageMeals);
            holder.price = (TextView) row.findViewById(R.id.textView14);
            holder.imgQuantity = (RelativeLayout) row.findViewById(R.id.hide);
            holder.soldOut = (ImageView) row.findViewById(R.id.sold_out);
            holder.descMenu = (TextView) row.findViewById(R.id.textView);
            holder.plus = (Button) row.findViewById(R.id.plus);
            holder.minus = (Button) row.findViewById(R.id.minus);


            if (User.getInstance().imgBitMap.get(meal.nameFr) == null)
                new LoadImageFromURL(holder.img, meal).execute(meal.imageRealUrl);
            else
                holder.img.setImageBitmap(User.getInstance().imgBitMap.get(meal.nameFr));

            holder.txtTitle.setText(meal.nameFr);
            holder.price.setText(meal.price + "0 €");
            setButton(row, meal);
            setImage(row, meal);
            row.setTag(holder);
        } else {
            holder = (ViewHolder) row.getTag();
        }

        holder.img.setTag(position);
        holder.plus.setTag(position);
        holder.minus.setTag(position);
        holder.txtTitle.setTag(position);
        holder.price.setTag(position);

    return row;
}

1 个答案:

答案 0 :(得分:0)

convertView == null设置图像和文本视图时。 else部分意味着视图已被回收,因此您不必进行充气。但是,你也必须在那里进行所有图像和文字设置。因此,只需从if块中取出图像/文本设置代码,然后将其移动到if / else块之后,使其在任何一种情况下运行。