#selectItem() should return early if trying to select something already selected
#onSelectItem() should be called appropriately
#deselectItem() should dereference selected, call deselect() and onDeselectItem()