l'ajout de CheckBox à la ligne de liste perd mes événements onItemClick?

J'ai une ListView avec une liste de tableaux de l'adaptateur. Les lignes ne sont pas très complexe (une Image sur la gauche, un LinearLayout avec TextViews à l'intérieur, et une Case à cocher sur la droite ... la mise en page est copiée ci-dessous.) Le but est d'avoir un QuickAction barre de venir si l'utilisateur clique sur l'image ou le texte, et la Case se trouvant à changer d'état si l'utilisateur clique sur la Case à cocher. J'ai chaque partie travailler de manière indépendante, mais pas quand ils sont ensemble dans la mise en page - j'ai l'impression de perdre le onItemClick événement.

La "QuickAction" bar est activé par OnItemClickListener(), et il fonctionne très bien - à moins que j'ai la Case à cocher dans la mise en page, dans ce cas la Case fonctionne très bien (à l'aide de onClick ()), mais les onItemClickListener n'est jamais déclenché lorsque l'utilisateur clique sur la ligne, mais en dehors de la Case. La mise en page (sans style stuff) est:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/vw1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <ImageView android:id="@+id/img"
        android:layout_alignParentLeft="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <CheckBox android:id="@+id/ckb"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_gravity="right"
    android:checked="false" />

<!-- stack text in middle section of the row -->
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        >

        <TextView android:id="@+id/text1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content""/>

        <TextView android:id="@+id/text2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    </LinearLayout>
</RelativeLayout>

Le code derrière il n'est pas compliqué:

public class ListGroupsActivity extends BaseActivityForList {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list);

        //add QuickAction bar
        ListView lv = getListView();
        lv.setOnItemClickListener(new QAListener(this));
    }
}

    //inner classes of the ListGroupsActivity
    class CbOnClickListener implements OnClickListener {
        //...
        //test the checkbox isChecked() and keep state in 'selectedItems' array

    class GroupListAdapter extends ArrayAdapter<Group> {
        super(/*...*/)
    CbOnClickListener cblistener = null; //common listener for all the CheckBoxes

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            //here do normal testing for convertView being null etc 
            //heres the view inflation from the layout into the ViewHolder
            holder.tv1 = (TextView) convertView.findViewById(R.id.text1);
            holder.tv2 = (TextView) convertView.findViewById(R.id.text2);
            holder.img = (ImageView) convertView.findViewById(R.id.img);
            holder.ckb = (CheckBox) convertView.findViewById(R.id.ckb);

            Group g = groups.get(position); //this is the data obj for the row

            holder.tv1.setText(g.getName());
            holder.tv2.setText("child groups");
            Bitmap bm = BitmapFactory.decodeFile(g.getIconUri());
            holder.img.setImageBitmap(bm);
            Integer key = (Integer) g.getId();
            holder.ckb.setChecked(selectedItems.contains(key)); 

            holder.ckb.setOnClickListener(cblistener); //hook onClick to cblistener
            return convertView;
    }

La QAListener est dans une super-classe de toutes les ma liste des activités:

public class BaseActivityForList extends
    OrmLiteBaseListActivity<DatabaseHelper> {

    //QAListener inner class, constructs new quick action bar when item clicked
    class QAListener implements OnItemClickListener {
        public void onItemClick(AdapterView<?> parent, View view,
                                int position, long id) {
            //has three ActionItem instances, 'copyAction', 'delAction', 'editAction'
            ActionItem copyAction = new ActionItem();

            copyAction.setOnClickListener(new OnClickListener() {
                 @Override
                 public void onClick(View v) {
                     //... does some stuff
                     mQuickAction.dismiss();
                 }
             }); //end setOnClickListener
        } //end onItemClick
    } //end QAListener
} end BaseActivityForList

Alors, comment dois-je faire pour la Case à cocher pour ramasser le onClick, et le reste de l'élément de la liste pour ramasser les onItemClick()?

source d'informationauteur Wayne