Every time it's shown you run listview_CreateList
Every time listview_CreateList is run, among other things, it creates a new fontstring on the buttons so you are getting overlay.
Maybe change your xml to only create the buttons, fontstrings etc. once, or do it OnLoad.
Code:
<OnShow>
self.selected = nil
if not self.buttons then
listview_CreateList(self, self:GetHeight()/20)
end
</OnShow>