我在ListView中有三个项目,在每个列表项目上我有三个TextView,一个包含项目价格,第二个显示数量,第三个显示该项目的总和。
还有两个TextView,一个用于增加数量,另一个用于减少数量。
现在问题是每当我对第一个或第二个列表项的数量进行更改时,它会对第三个列表项的数量和总量产生影响(即 - 列表中的最后一项)
public class CartAdapter extends BaseAdapter {
ViewHolder holder;
......
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// convert view = design
View v = convertView;
if (v == null) {
holder = new ViewHolder();
v = layoutInflater.inflate(Resource, null);
holder.textViewPrice = (TextView) v.findViewById(R.id.textPrice);
holder.editTextQuantity = (EditText) v.findViewById(R.id.editQuantity);
holder.textViewTotal = (TextView) v.findViewById(R.id.textTotal);
v.setTag(holder);
} else {
holder = (ViewHolder) v.getTag();
}
holder.textViewPrice.setText("$ " +cartArrayList.get(Integer.parseInt(holder.textViewPrice.getTag())).getPrice());
cart = cartArrayList.get(Integer.parseInt(v.getTag()));
holder.editTextQuantity.setText(String.valueOf(cart.getQuantity()));
df = new DecimalFormat("0.00##");
totalPrice = cart.getQuantity() * cart.getPrice();
cart.setTotal(totalPrice);
holder.textViewTotal.setText("$ " + df.format(cart.getTotal()));
return v;
}
答案 0 :(得分:1)
在ViewHolder
方法开始时初始化您的getView
对象。
答案 1 :(得分:0)
试试这种方式
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// convert view = design
View v = convertView;
if (v == null) {
holder = new ViewHolder();
v = layoutInflater.inflate(Resource, null);
holder.textViewPrice = (TextView) v.findViewById(R.id.textPrice);
holder.editTextQuantity = (EditText) v.findViewById(R.id.editQuantity);
holder.textViewTotal = (TextView) v.findViewById(R.id.textTotal);
v.setTag(holder);
} else {
holder = (ViewHolder) v.getTag();
}
v.setTag("ID",position);
holder.textViewPrice.setTag(position);
holder.editTextQuantity.setTag(position);
holder.textViewTotal.setTag(position);
holder.textViewPrice.setText("$ " +cartArrayList.get(Integer.parseInt(holder.textViewPrice.getTag())).getPrice());
cart = cartArrayList.get(Integer.parseInt(v.getTag()));
holder.editTextQuantity.setText(String.valueOf(cart.getQuantity()));
df = new DecimalFormat("0.00##");
totalPrice = cart.getQuantity() * cart.getPrice();
cart.setTotal(totalPrice);
holder.textViewTotal.setText("$ " + df.format(cart.getTotal()));
return v;
}
答案 2 :(得分:0)
基础适配器中只有一个holder变量。每次调用getView()时都会更新。问题是您的点击侦听器正在使用该holder变量来更新视图。持有者现在指向已创建的最后一个视图项,这是在onClick中更新的视图项。
解决问题的一种简单方法是创建最终的ViewHolder变量并在onClicks中使用它。您可以对OnClickListeners使用相同的变量。
喜欢这样..
0003 this is nothing but 2000/03
0006 ------------------- 2000/06
0009
0012
0103 ------------------- 2001/03
.
.
9912 ------------------- 1999/12