1

I am having two buttons and a text view on my listview item when I click the buttons to change the text of text view of that current item, but the text of the last item in list changes.I have given my adapter class below, can ask for more info if required. Thank You. Need Help.

public class CartAdapter extends BaseAdapter {

        Context context;
        LayoutInflater layoutInflater;
        List cartProImageListA, cartProNameListA, cartProQuntListA, cartUnitPriceListA, cartIdlListA, cartpriceListA;
        ViewHolder viewHolder;
        int quantity = 0;
        customButtonListener customListner;
        int Position;

        public interface customButtonListener {
            public void onButtonClickListner(int position);
        }

        public void setCustomButtonListner(customButtonListener listener) {
            this.customListner = listener;
        }

        public CartAdapter(Context context, List cartIdList, List cartProImageList, List cartProNameList, List cartProQtyList,
                           List cartUnitPriceList, List cartPriceList) {
            this.context = context;
            this.cartIdlListA = cartIdList;
            this.cartProImageListA = cartProImageList;
            this.cartProNameListA = cartProNameList;
            this.cartProQuntListA = cartProQtyList;
            this.cartUnitPriceListA = cartUnitPriceList;
            this.cartpriceListA = cartPriceList;
            layoutInflater = LayoutInflater.from(context);
        }

        @Override
        public int getCount() {

            return cartProNameListA.size();
        }

        @Override
        public Object getItem(int i) {
            return cartProNameListA.get(i).toString();
        }

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

        class ViewHolder {
            TextView cartProNameTextView, cartStockTextView, cartProPriTextView, cartprice;
            ImageView cartProImageView;
            Button plusBtnId, minusBtnId, cartRemoTextView;

        }

        /**
         * Notifies the attached observers that the underlying data has been changed
         * and any View reflecting the data set should refresh itself.
         */

        @Override
        public View getView(final int position, View view, ViewGroup viewGroup) {

            view = layoutInflater.inflate(R.layout.confirmordercartview, null);

            viewHolder = new ViewHolder();

            viewHolder.cartProNameTextView = (TextView) view.findViewById(R.id.cartProNameTextViewId);
            viewHolder.cartStockTextView = (TextView) view.findViewById(R.id.cartProQuntTextViewId);
            viewHolder.cartProPriTextView = (TextView) view.findViewById(R.id.cartProPriceTextViewId);
            viewHolder.cartRemoTextView = (Button) view.findViewById(R.id.cartRemovTextViewId);
            viewHolder.cartprice = (TextView) view.findViewById(R.id.cartPrototalPriceTextViewId);
            viewHolder.cartProImageView = (ImageView) view.findViewById(R.id.cartProImageImageViewId);
            viewHolder.plusBtnId = (Button) view.findViewById(R.id.plusBtnId);
            viewHolder.minusBtnId = (Button) view.findViewById(R.id.minusBtnId);
            viewHolder.plusBtnId.setTag(position);
            viewHolder.plusBtnId.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    quantity++;
                    Position = (Integer) view.getTag();
                    viewHolder.cartStockTextView.setText(quantity + "");
                }
            });

            viewHolder.minusBtnId.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if (quantity > 0) {
                        quantity--;
                        viewHolder.cartStockTextView.setText(quantity + "");
                    }
                }
            });
            try

            {

                viewHolder.cartProNameTextView.setText(cartProNameListA.get(position).toString());
                viewHolder.cartProPriTextView.setText("Unit Price: " + Globle.toTakeTwoDigitAfterDecimal(cartUnitPriceListA.get(position).toString()));
                Glide.with(context).load("URL" + cartProImageListA.get(position).toString()).into(viewHolder.cartProImageView);
                viewHolder.cartStockTextView.setText(cartProQuntListA.get(position).toString());
                viewHolder.cartprice.setText("Price: " + cartpriceListA.get(position).toString());
                viewHolder.cartRemoTextView.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        if (customListner != null) {
                            customListner.onButtonClickListner(position);
                        }

                    }
                });

            } catch (
                    Throwable EE)

            {
                Log.e("Throwable", "" + EE);
            }
            return view;
        }
    }
Ramana V V K
  • 1,245
  • 15
  • 24
  • It is wrong to update only the view directly. You will also have problem when you scroll the list. You can update data lists and use notifyDataSetChanged() to update the ListView. I've a blog: http://programandroidlistview.blogspot.com/. Hope it help! – i_A_mok Jun 03 '17 at 07:32

1 Answers1

0

Adapter and view holder works by reusing the same component instead of creating new views. So in your view holder always try to reset the textview with the appropriate value for that position or just clear the databy setText("") at initially

Prasanna Anbazhagan
  • 1,693
  • 1
  • 20
  • 37