Refactored to use an AbstractAdapter
Everything seems to still work fine, but don't merge yet.
* Will continue with click listeners next