Search code examples
javaandroidlistviewandroid-listviewlistadapter

change label text on button click inside a listview item


I have a listview item with a label and two buttons. I tried to change the label on button click. But it's changing text on another listview item. Not the label with button. I did this using a custom list adapter. I tried it like following,

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    final MenuItem listItem = objects.get(position);

    if (convertView == null) {
        LayoutInflater inflater = (LayoutInflater) this.context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(R.layout.menu_list_item, null);

        btnPlus = (ButtonRectangle) convertView.findViewById(R.id.buttonPlus);
        btnPlus.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int i = 0;
                cartQtyTextView.setText("" + ++i);

            }
        });
    }
}

How may I fix this?


Solution

  • You might want to create holder. I didn't include your menu item code due to i didn't see you got use it.

    public class Holder {
        ButtonRectangle buttonPlus;
        TextView cartQtyTextView;
    }
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // Get Holder
        final Holder holder = new Holder();
    
        // Change Layout
        LayoutInflater inflater = (LayoutInflater) this.context
                                  .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View view = inflater.inflate(R.layout.menu_list_item, null);
    
        // Find Control
        holder.buttonPlus = (ButtonRectangle)view.findViewById(R.id.buttonPlus);
        holder.cartQtyTextView = (TextView)view.findViewById(R.id.cartQtyTextView);
    
        // Check & Set
        if (holder.buttonPlus != null) {
            holder.buttonPlus.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    int i = 0;
                    if (holder.cartQtyTextView != null) {
                        holder.cartQtyTextView.setText("" + ++i);
                    }
                }
            });
        }
    
        return view;
    }