how to setOnclickListener() on the Button inside the ListView?

25,287

Solution 1

just handle on click listener inside getview where you find the button using findviewbyid

this will handle the current row button click

public class MySimpleArrayAdapter extends ArrayAdapter<String> implements OnClickListener {
    private final Activity context;
    private final String[] names;
    private Button deleteButton= null;
    public MySimpleArrayAdapter(Activity context, String[] names) {
        super (context, R.layout.imagelistlayout, names);
        this.context = context;
        this.names = names;

    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = context.getLayoutInflater();
        View rowView = inflater.inflate(R.layout.imagelistlayout, null, true);
        deleteButton= (Button)rowView.findViewById(R.id.delete_bn);
        deleteButton.setTag(position);
        TextView textView = (TextView) rowView.findViewById(R.id.label);
        textView.setText(names[position]);
       deleteButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                //try to hide textview or something it may help
            }
        });
        return rowView;

    }

}`

Solution 2

You should try not to hard code your onClick handler in the getView method but look at how you assign a onClick method to a listview. Here you assign the method from the activity and that is what you should do here too.

In you adapter create a method called setOnXXXClickListener

public void setOnXXXClickListener(final OnClickListener onClickListener) {
    this.onXXXClickListener = onClickListener;
}

and in your getView assign this to the button like so

viewHolder.xxx.setOnClickListener(this.onXXXClickListener);

From you Activity you can then assign the onClick method like this

this.adapter.setOnXXXClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        Log.d(TAG, "OnXXXClickListener");
    }
});
Share:
25,287
Sandroid
Author by

Sandroid

Updated on April 20, 2020

Comments

  • Sandroid
    Sandroid about 4 years

    In app I have a Listactivity which has an adapter with TextView and Button(labeled delete). Now I want to remove corresponding Button clicked item. please check the code and suggest???? `

    public class MySimpleArrayAdapter extends ArrayAdapter<String> implements OnClickListener {
        private final Activity context;
        private final String[] names;
        private Button deleteButton= null;
        public MySimpleArrayAdapter(Activity context, String[] names) {
            super (context, R.layout.imagelistlayout, names);
            this.context = context;
            this.names = names;
    
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            LayoutInflater inflater = context.getLayoutInflater();
            View rowView = inflater.inflate(R.layout.imagelistlayout, null, true);
            deleteButton= (Button)rowView.findViewById(R.id.delete_bn);
            deleteButton.setTag(position);
            TextView textView = (TextView) rowView.findViewById(R.id.label);
            textView.setText(names[position]);
            deleteButton.setOnClickListener(this); 
            return rowView;
    
        }
    
        @Override
        public void onClick(View convertView) {
            System.out.println(deleteButton.getTag());
    
        }
    
    }` 
    

    I want to know how can I delete the item whose button has been clicked.