add ViewHolder pattern to ListAdapter