我有一个自定义ListView,当我显示它时,我得到3个第一个元素,当我滚动时它们会重复。所有其他元素永远不会显示。
我尝试使用setTag
和getTag
,但它不起作用。我找到的唯一方法是每次滚动一个元素时重建视图(禁用if (row = null)
),但我认为这不是一件好事。
这是我的getView方法(包含setTag
和getTag
):
@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;
}
答案 0 :(得分:0)
当convertView == null
设置图像和文本视图时。 else
部分意味着视图已被回收,因此您不必进行充气。但是,你做也必须在那里进行所有图像和文字设置。因此,只需从if块中取出图像/文本设置代码,然后将其移动到if / else块之后,使其在任何一种情况下运行。