【问题标题】:Last value is incremented / decremented while click previous list item in ListView单击 ListView 中的上一个列表项时,最后一个值递增/递减
【发布时间】:2016-03-16 09:22:51
【问题描述】:

我正在开发一个类似于购物车的应用程序。这里我使用 BaseAdapter 来填充购物车数据。有,

3 个列表项:

第 1 行

第 2 行

第 3 行

当我单击第 1 行/第 2 行的增加/减少按钮时,第 3 行的购物车项目数分别增加/减少。我需要计算所有产品的总和。

这是我的代码。请检查并帮助我修复它。

提前致谢。

public class CartCountBaseAdapter extends BaseAdapter implements View.OnClickListener {
    Context con;
    ArrayList<HashMap<String, String>> ArproductMap;
    String MYFRAGMENT;
    ViewHolder viewHolder;


    public CartCountBaseAdapter(Context context, ArrayList<HashMap<String, String>> arproductMap, String myfragment) {
        this.con = context;
        this.ArproductMap = arproductMap;
        this.MYFRAGMENT = myfragment;
    }

    @Override
    public int getCount() {
        return ArproductMap.size();
    }

    @Override
    public Object getItem(int position) {
        return position;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        viewHolder = new ViewHolder();
        if (convertView == null) {
            LayoutInflater mInflater = (LayoutInflater) con.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
            convertView = mInflater.inflate(R.layout.cart_list_item, null);
        }


        viewHolder.addTowish = (Button) convertView.findViewById(R.id.addTowish);
        viewHolder.remove = (Button) convertView.findViewById(R.id.remove);

        viewHolder.cartProduct = (TextView) convertView.findViewById(R.id.cartProduct);
        viewHolder.cartQuantity = (TextView) convertView.findViewById(R.id.cartQuantity);
        viewHolder.cartCount = (TextView) convertView.findViewById(R.id.cartCount);
        viewHolder.cartPrice = (TextView) convertView.findViewById(R.id.cartPrice);
        viewHolder.cartPriceDum = (TextView) convertView.findViewById(R.id.cartPriceDum);

        viewHolder.ivDecrease = (ImageView) convertView.findViewById(R.id.ivDecrease);
        viewHolder.ivIncrease = (ImageView) convertView.findViewById(R.id.ivIncrease);

        viewHolder.cardView = (CardView) convertView.findViewById(R.id.cardlist_item);

        if (MYFRAGMENT == "CheckOutFragment") {
            viewHolder.addTowish = (Button) convertView.findViewById(R.id.addTowish);
            viewHolder.remove = (Button) convertView.findViewById(R.id.remove);
            viewHolder.addTowish.setVisibility(View.GONE);
            viewHolder.remove.setVisibility(View.GONE);
            viewHolder.cardView.setCardElevation(0);
            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams
                    (LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
            viewHolder.cardView.setLayoutParams(layoutParams);
        }
        int CARTPRICE = Integer.parseInt(ArproductMap.get(position).get("Hash_Cart_Price"));
        viewHolder.cartProduct.setText(ArproductMap.get(position).get("Hash_Product_Name"));
        viewHolder.cartQuantity.setText(ArproductMap.get(position).get("Hash_Cart_Category"));
        viewHolder.cartCount.setText(ArproductMap.get(position).get("Hash_Cart_Quantity"));
        viewHolder.cartPrice.setText(String.valueOf(CARTPRICE));
        viewHolder.cartPriceDum.setText(String.valueOf(CARTPRICE));

        viewHolder.Quantity = Integer.parseInt(viewHolder.cartCount.getText().toString());

        viewHolder.addTowish.setOnClickListener(this);
        viewHolder.remove.setOnClickListener(this);

        viewHolder.ivDecrease.setTag(position);
        viewHolder.ivIncrease.setTag(position);

        viewHolder.ivDecrease.setOnClickListener(this);
        viewHolder.ivIncrease.setOnClickListener(this);


        return convertView;
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.ivIncrease:
                viewHolder.Quantity++;
                viewHolder.cartCount.setText(viewHolder.Quantity + "");

                break;

            case R.id.ivDecrease:
                viewHolder.Quantity--;
                if (viewHolder.Quantity <= 0) {
                    viewHolder.Quantity = 0;
                    viewHolder.cartCount.setText(viewHolder.Quantity + "");
                } else {
                    viewHolder.cartCount.setText(viewHolder.Quantity + "");
                }
                break;
        }
    }

    static class ViewHolder {
        TextView cartProduct,
                cartQuantity,
                cartCount,
                cartPrice,
                cartPriceDum;

        int Quantity;
        ImageView ivDecrease;
        ImageView ivIncrease;
        Button addTowish;
        Button remove;
        CardView cardView;
    }
}

【问题讨论】:

    标签: android listview baseadapter


    【解决方案1】:

    您永远不应该在您的视图持有者中放置任何数据。将数据放入任何数据类型,如 Arraylist。然后在您的点击中获取位置并根据该位置修改数据

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.ivIncrease:
                int position  = (int) v.getTag
                datalist[position]++;
                viewHolder.cartCount.setText(viewHolder.Quantity + "");
    
                break;
    
            case R.id.ivDecrease:
                int position  = (int) v.getTag
                datalist[position]++;
                if (viewHolder.Quantity <= 0) {
                    viewHolder.Quantity = 0;
                    viewHolder.cartCount.setText(viewHolder.Quantity + "");
                } else {
                    viewHolder.cartCount.setText(viewHolder.Quantity + "");
                }
                break;
        }
    }
    

    此外,如果您想进行任何与视图相关的更改,请将您的 onclick 界面放在 viewholder 类中,然后使用此对象

    【讨论】:

      猜你喜欢
      • 2022-01-18
      • 2012-07-17
      • 1970-01-01
      • 2021-05-17
      • 1970-01-01
      • 2018-01-21
      • 1970-01-01
      • 2016-01-23
      • 1970-01-01
      相关资源
      最近更新 更多