RecyclerView increase(+) and decrease(-) buttons not working properly for each Item

Shivaraj Patil :

I am having two buttons in my recyclerview for increment(+) and decrement(-) of quantity value as like cart application, while incrementing item value of 0th item my next item i.e 1st get incremented by previuos value of 0th item means if my value of 0th item is 4 and for 1st item if I increment it by 1 then it will take 5 directly instead of starting from 0.

public class TeaListAdapter extends RecyclerView.Adapter<TeaListAdapter.MyViewHolder> {
    private  int num=0;

    private List<TeaListPOJO> teaItemList;

    public class MyViewHolder extends RecyclerView.ViewHolder {
        public TextView tvitemName, tvitemRate,number;
        public ImageView ivItemImg;
        public Button btnIncrease,btnDecrease;
        RecyclerView.ViewHolder holder;


        public MyViewHolder(View view) {
            super(view);
            tvitemName = (TextView) view.findViewById(R.id.txt_item_name);
            tvitemRate = (TextView) view.findViewById(R.id.txt_item_price);
            ivItemImg= (ImageView) view.findViewById (R.id.iv_item);
            number=(TextView) view.findViewById (R.id.integer_number);
            btnIncrease =view.findViewById(R.id.btn_increase);
            btnDecrease = view.findViewById(R.id.btn_decrease);

        }
    }


    public TeaListAdapter(List<TeaListPOJO> teaItemList) {

        this.teaItemList = teaItemList;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.rv_placeorder_items, parent, false);

        return new MyViewHolder (itemView);
    }

    @Override
    public void onBindViewHolder(final MyViewHolder holder, final int position) {

        final TeaListPOJO tealist = teaItemList.get(position);
        holder.tvitemName.setText(tealist.getItemName ());
        holder.tvitemRate.setText(AppConstants.INDIAN_RUPEE_SIGN.concat (tealist.getItemRate ()));
       // holder.number.setText (tealist.getQty ());
        holder.btnIncrease.setOnClickListener (new View.OnClickListener () {
            @Override
            public void onClick(View view) {
                num++;
                holder.number.setText (String.valueOf (num));
                notifyDataSetChanged();
            }
        });
        holder.btnDecrease.setOnClickListener (new View.OnClickListener () {
            @Override
            public void onClick(View view) {
                if(num>0)
                num--;
                holder.number.setText (String.valueOf (num));

            }
        });

        byte[] decodedString = new byte[0];
        try {
            decodedString = Base64.decode(tealist.getImageStr(), Base64.DEFAULT);
            // tenantModelPOJO.setLogo(decodedString);
            Bitmap bmp = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
            holder.ivItemImg.setImageBitmap(Bitmap.createScaledBitmap(bmp,60,
                    60, false));
        } catch (Exception e) {
            e.printStackTrace();
        }

    }


    @Override
    public int getItemCount() {

        return teaItemList.size();
    }
}
Jasurbek :

Your problem is declaring only one variable for all views, You should take value from TextView then modify and then set it back to TextView Try this code

 holder.btnIncrease.setOnClickListener (new View.OnClickListener () {
            @Override
            public void onClick(View view) {
               int val = 0; 
                try{

                val = Integer.parseInt(holder.number.getText().toString());  
                }catch(Exception e) {
                val = 0; 
                }
                holder.number.setText (String.valueOf (val++));

            }
        });
        holder.btnDecrease.setOnClickListener (new View.OnClickListener () {
            @Override
            public void onClick(View view) {


                int val = 0; 
                try{

                val = Integer.parseInt(holder.number.getText().toString());  
                }catch(Exception e) {
                val = 0; 
                }
                if(val>0) val--;
                holder.number.setText (String.valueOf (val));

            }
        });

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=122138&siteId=1