It seems that you Destroy and Instantiate the items whenever you hide/show them because .Start() is only called once foreach Component.
You should recycle the GameObject :
- When you want to hide an item, don't destroy it, disable the GameObject and keep the reference in a Queue
- When you need to show an item, pop an item in your Queue, update the parameters (label text, sprits) and enable it.
- If the Queue is empty and you need an item, just instantiate it. You can also pre instantiate as many items as you need at the start of the game.