Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android listview onclicklistener not working with checkbox

In my listview there is a checkbox, textviews and an imageview. When I click on an item, the onclicklistnere is not working. I know this is because the checkbox has its own listener and it overrides the listview onclicklistener. Fine. When I set

android:focusable="false"
android:focusableInTouchMode="false"

in the checkbox, I can click on the list item but the checkbox becames orange as well (like the item).

So this is a half solution, does anyone know a better one?

This is the class:

    public class ListViewTutorial2Activity extends Activity {

    SimpleAdapter mSchedule;
    ListView list;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        list = (ListView) findViewById(R.id.SCHEDULE);

        ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
        HashMap<String, String> map = new HashMap<String, String>();
        map.put("train", "101");
        map.put("from", "6:30 AM");
        map.put("to", "7:40 AM");
        mylist.add(map);
        map = new HashMap<String, String>();
        map.put("train", "103(x)");
        map.put("from", "6:35 AM");
        map.put("to", "7:45 AM");
        mylist.add(map);
         mSchedule = new SimpleAdapter(this, mylist, R.layout.row,
                    new String[] {"train", "from", "to"}, new int[] {R.id.TRAIN_CELL, R.id.FROM_CELL, R.id.TO_CELL});
        list.setAdapter(mSchedule);

        list.setOnItemClickListener(new OnItemClickListener() 
        {
        @Override
        public void onItemClick(AdapterView<?> a, View v, int position, long id) {
             Object o = list.getItemAtPosition(position);
            }
        });
    }
}

and row.xml:

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:paddingTop="4dip"
     android:paddingBottom="6dip"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:orientation="horizontal">
    <CheckBox
        android:id="@+id/check"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:clickable="true"
        android:descendantFocusability="beforeDescendants">
    </CheckBox>
     <TextView android:id="@+id/TRAIN_CELL"
         android:layout_width="50dip"
         android:layout_height="wrap_content"/>

     <TextView android:id="@+id/FROM_CELL"
         android:layout_width="70dip"
         android:layout_height="wrap_content" android:layout_weight="1"/>

     <TextView android:id="@+id/TO_CELL"
         android:layout_width="60dip"
         android:layout_height="wrap_content"  android:layout_weight="1"/>

            <ImageView
        android:id="@+id/icon"
        android:layout_width="22px"
        android:layout_height="22px"
        android:layout_marginLeft="4px"
        android:layout_marginRight="10px"
        android:layout_marginTop="4px"
        android:src="@drawable/icon" >
    </ImageView>
</LinearLayout>
like image 219
erdomester Avatar asked Dec 06 '25 02:12

erdomester


1 Answers

Have you tried adding this to your CheckBox in your xml layout?

android:focusable="false"
android:focusableInTouchMode="false"

This worked for me and might be a better solution then what you had to go through.

like image 59
prolink007 Avatar answered Dec 08 '25 04:12

prolink007



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!