Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android: ListView elements with multiple clickable elements

I've a ListView where every element in the list contains a TextView and two different Buttons. Something like this:

ListView
--------------------
[ImageView][Text][CheckBox][Button]
--------------------
[ImageView][Text][CheckBox][Button]
--------------------
... (and so on) ...

With this code I can create an OnItemClickListener for the whole item:

listView.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> list, View view, int position, long id) {
        Log.i(TAG, "onListItemClick: " + position);

        }

    }
});

However, I don't want the whole item to be clickable, but only the checkbox and the button of each list element.

So my question is, how do I implement a onClickListener for these two buttons with the following parameters:

  • int id (some id associated with each item in list)
  • int position (which is the element in the list on which the button click happened)
like image 747
Neji Avatar asked Sep 14 '26 13:09

Neji


2 Answers

you need to make baseAdpter to achieve this

public class ContactsAdapter extends BaseAdapter {

    ArrayList<ContactInfo> mlist;
    Context mcontext;


public BluetoothChatadpter(Context context,ArrayList<ChatInfo> mchtlist) {      
        mlist =  mchtlist;
        mcontext = context;

    }

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

    @Override
    public Object getItem(int postion) {
        return mlist.get(postion);
    }

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

    @Override
        public View getView(int position, View convertview, ViewGroup viewgroup){
            View view = null;
            if(convertview == null){
                LayoutInflater inflater = context.getLayoutInflater();
                view = inflater.inflate(R.layout.contactrow, null);

                ContactHolder holder = new ContactHolder();

                holder.txtviewfirstname = (TextView)view.findViewById(R.id.firstname);
                holder.txtviewphone = (TextView)view.findViewById(R.id.phone);
                holder.chkselected = (CheckBox)view.findViewById(R.id.check);

                setOnClickListener(new OnClickListener() {
        @Override
            public void onClick(View arg0) {
            // to open the selected file in resp

                  // do your work here
                 }});


    chkselected .setOnClickListener(new OnClickListener() {
        @Override
    public void onClick(View v) {
    // Toast.makeText(context,// "checked is clicke="+pos, 12).show();
            if (chkselected.isChecked())          
                       {            

                        // do your work here
            } else {

     // do your work here                               
            }
        }
});



            view.setTag(holder);

        }
            else{
                view = convertview;
            }
            ContactHolder holder2 = (ContactHolder) view.getTag();
            holder2.txtviewfirstname.setText(list.get(position).firstname);
            holder2.txtviewphone.setText(list.get(position).phonenumber);
            holder2.chkselected.setChecked(list.get(position).selected);
            return view;
        }

}
like image 165
Ankitkumar Makwana Avatar answered Sep 17 '26 04:09

Ankitkumar Makwana


i solved the same problem in this way: in the layout.xml of the ListViewItem give the elements a tag, where you want to add the OnClickListener:

       android:id="@+id/CheckBox"
       android:tag="CheckBox" />

....

       android:id="@+id/Button"
       android:tag="Button" />

In the code, where your ListView is inflated add the OnClickListener with the following code:

       listView.findViewWithTag("CheckBox").setOnClickListener(createCheckBoxOnClickListener(act));
       listView.findViewWithTag("Button").setOnClickListener(createButtonOnClickListener(act));
like image 34
Robert Siwy Avatar answered Sep 17 '26 04:09

Robert Siwy



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!