0

I have a listview where every items have one TextView and 2 Buttons ( + and - ). I want to iterate the quantity from TextView when I press the + Button. After this, I need to sum up all items (price * item quantity) for every item from the list and put the result into new TextView(total cost). That is my adapter and activity main. I appreciate any help.

public class cartItemsAdapter extends BaseAdapter {
    private ArrayList<items> itemsList;
    private Context context;


    public cartItemsAdapter(ArrayList<items> list,Context cont){
        this.itemsList = list;
        this.context=cont;
    }

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

    @Override
    public Object getItem(int position) {
        return this.itemsList.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;

        if(convertView==null){
            LayoutInflater inf = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inf.inflate(R.layout.list_cart_item_view,null);

            holder = new ViewHolder();
            holder.imageView = (ImageView)convertView.findViewById(R.id.icon_item);
            holder.nameView = (TextView) convertView.findViewById(R.id.name_item);
            holder.priceView=(TextView)convertView.findViewById(R.id.price_item);
            holder.plusButton = (Button) convertView.findViewById(R.id.cart_plus_button);
            holder.minusButton = (Button) convertView.findViewById(R.id.cart_minus_button);
            holder.removeButton = (Button) convertView.findViewById(R.id.cart_remove_button);
            holder.quantityView = (TextView) convertView.findViewById(R.id.cart_quantity_view);

            convertView.setTag(holder);
        }else{
            holder=(ViewHolder)convertView.getTag();
        }

        items itm = itemsList.get(position);
        holder.imageView.setImageResource(itm.getlImageId());
        holder.nameView.setText(itm.getlName());
        holder.priceView.setText(itm.getlPrice() + " $");
        holder.quantityView.setText("1");

            /*holder.plusButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int pquant=Integer.valueOf(quant.toString());
                pquant++;


            }
        });
        holder.minusButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int mquant=Integer.valueOf(quant.toString());
                mquant--;
            }
        });*/


        return convertView;
    }

    private static class ViewHolder{
        public ImageView imageView;
        public TextView nameView;
        public TextView priceView;
        public Button plusButton;
        public Button minusButton;
        public Button removeButton;
        public TextView quantityView;
    }
}


protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.cart);

    plusBtn = findViewById(R.id.cart_plus_button);
    minusBtn = findViewById(R.id.cart_minus_button);
    removeBtn = findViewById(R.id.cart_remove_button);
    quantity = findViewById(R.id.cart_quantity_view);

    listView = (ListView) findViewById(R.id.cart_category_listview);
    favoriteDbHelper = new DatabaseHelper(this);
    item = favoriteDbHelper.getAllDataCart();
    myAdapter = new cartItemsAdapter(item, this);
    listView.setAdapter(myAdapter);
}
Sergey Glotov
  • 19,479
  • 11
  • 78
  • 93

1 Answers1

0

Actually this code of yours is pretty close:

    holder.plusButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int pquant=Integer.valueOf(quant.toString());
            pquant++;


        }
    });
    holder.minusButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int mquant=Integer.valueOf(quant.toString());
            mquant--;
        }
    });

All you need to do is to access itemsList inside onClick(View v). To make it simple, try this:

holder.plusButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        int position = getAdapterPosition();
        Items item = itemsList.get(position);
        //now you can get your quant by accessing this item object
    }
});

The key is to get current position using getAdapterPosition().

Harry Timothy
  • 1,048
  • 6
  • 16
  • i try what u say, but i failed, can u pls show me exactly what i need to do to access and modify? – Robert Vasile Feb 11 '20 at 17:52
  • Assuming `int quant` exists in your `Items` class, you can just access it using `item.setQuant(item.getQuant() + 1);`. Or maybe you can provide more information about where do you store this `quant` integer? – Harry Timothy Feb 12 '20 at 06:29