ListView位置问题(..)中



我在listView中有三个项目,在每个列表项目中,我有三个文本视图,一个包含项目价格,其次显示数量,第三个显示了总数项目。

还有另外两个文本视图,一个增加数量,其次减少数量。

现在,问题是每当我对第一个或第二个列表项目的数量进行更改,它会影响第三列表项目的数量和总量(即列表中的最后一个项目)

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;
}

getView方法开始时初始化ViewHolder对象。

尝试这种方式

  @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;
}

基本适配器中只有一个持有人变量。每个调用to getView()正在更新。问题在于,您的点击侦听器正在使用该持有人变量来更新视图。由于持有人现在指向创建的最后一个视图项目,这是在OnClick中更新的内容。

解决问题的一种简单方法是创建最终的Viewholder变量并在OnClicks中使用它。您可以对两个单切底词使用相同的变量。

喜欢..

final ViewHolder perItemHolder = holder;
holder.textQtyIncrease.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        if(p == 9) {
            Toast.makeText(context, "You have reached to maximum order quantity", Toast.LENGTH_LONG).show();
            return ;
        }
        else {
            p = p+1;
            perItemHolder.textViewQuantity.setText(""+p);
            totalPrice = p * cart.getPrice();    
            cart.setTotal(totalPrice);
            perItemHolder.textViewTotal.setText("$ " + df.format(cart.getTotal()));
        }
    }
});

最新更新