我的android应用程序中有一个viewholder
,我试图在一个文本字段上设置一个递增的值。我试着跟在后面,
活动
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
holder = new Holder();
LayoutInflater inflater = (LayoutInflater) this.context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.menu_list_item, null);
holder.textViewItemName = (TextView) convertView.findViewById(R.id.textViewItemName);
holder.textViewPrice = (TextView) convertView.findViewById(R.id.textViewPrice);
holder.imageView = (ImageView) convertView.findViewById(R.id.imageViewItem);
holder.buttonPlus = (ButtonRectangle) convertView.findViewById(R.id.buttonPlus);
holder.cartQtyTextView = (TextView) convertView.findViewById(R.id.textViewCartQty);
holder.buttonMinus = (ButtonRectangle) convertView.findViewById(R.id.buttonMinus);
convertView.setTag(holder);
} else {
holder = (Holder) convertView.getTag();
}
final MenuItem listItem = objects.get(position);
holder.textViewItemName.setText(listItem.getItemName());
holder.textViewPrice.setText("$ ".concat(String.valueOf(listItem.getItemPrice())));
// Check & Set
if (holder.buttonPlus != null) {
holder.buttonPlus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (holder.cartQtyTextView != null) {
if (holder.inc >= 0) {
holder.cartQtyTextView.setText(String.valueOf(holder.inc++));
}
}
}
});
}
holder.buttonPlus.setBackgroundColor(Color.WHITE);
holder.buttonPlus.setTextColor(Color.parseColor("#333333"));
// Check & Set
if (holder.buttonMinus != null) {
holder.buttonMinus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (holder.inc >= 0) {
holder.cartQtyTextView.setText(String.valueOf(holder.inc--));
}
}
});
}
holder.buttonMinus.setBackgroundColor(Color.WHITE);
holder.buttonMinus.setTextColor(Color.parseColor("#333333"));
return convertView;
}
持有人
class Holder {
ButtonRectangle buttonPlus;
ButtonRectangle buttonMinus;
TextView cartQtyTextView;
TextView textViewItemName;
TextView textViewPrice;
ImageView imageView;
int inc;
}
但这是随机递增的。我该怎么解决?
最佳答案
> But this is incrementing randomly
这是因为viewholder可能属于不同的订单行。
例子
在开始视图中,1属于订单行1,inc=2
如果向下滚动列表框,则orderline 1变为不可见,orderline 27变为可见。是的。
现在orderline 27正在重用viewholder 1,inc=2
如何解决此问题:
您需要一个存储数据inc、articleid、quantity、unitprice、articlename、……
final OrderItem orderItem = (OrderItem) objects.get(position);
...
orderItem.inc++;
另见https://stackoverflow.com/search?q=listview+random