getView中的ListView位置问题(...)

时间:2015-05-07 06:13:45

标签: android android-viewholder

我在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;

}

3 个答案:

答案 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