In my testing, it seems that ​-webkit-mask used to display the check on the x-list-item-inner component catches the tap event and stops it from propagating further. So the tap event shows up on the x-list-item-inner, but does not bubble up to the List's container.innerElement.

Possible fix:These two overrides are a hack, but they seem to work:

Code:

Ext.define('Ext.dataview.component.ListItemOverride', {
override: 'Ext.dataview.component.ListItem',
//bubble up 'checkboxtap' event since it has to be handled separately due to a Sencha bug
initialize: function(){
this.callParent();
this.enableBubble('checkboxtap');
},
//When a user clicks on the checkbox, the event is not caught by the list 'tap' event that is used for other clicks.
//This is to listen for that particular tap event and pass the event up as a 'chcekboxtap'
updateBody: function(body, oldBody) {
this.callParent(arguments);
var THIS = this;
if (body) {
body.element.getParent().on('tap', function(e, target){
if(target.className.indexOf('x-list-item-inner') != -1){ //This element only gets the event if the checkbox is clicked on
THIS.fireEvent('checkboxtap', e, target);
}
});
}
}
});
Ext.define('Ext.dataview.ListOverride', {
override: 'Ext.dataview.List',
//since the tap listener misses the checkbox being tap, catch the custom event made to detect that event and
//act accordingly.
initialize: function() {
this.callParent(arguments);
this.on('checkboxtap', this.onItemTap);
}
});