我有一个自定义ListView,当我显示它时,我得到了第三个元素,并且在滚动时会重复它们。所有其他元素都不会显示。
我尝试过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;
}
当convertView == null
您设置的图片和文字的观点。该else
部分意味着该视图被回收,因此您无需膨胀。但是,您也必须在那里进行所有图像和文本设置。因此,只需将图像/文本设置代码从if块中取出,然后将其移至if / else块之后,以使其在两种情况下均可运行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句