- Home /
 
Check if a listener has already been added to a button?
I've run into a bit of a snag with creating a button in the editor.
I need to dynamically add listeners to my button, but it just keeps adding the same 3 listeners over and over because there is nothing stopping it from adding the same ones on each Awake.

Here is my code...
         var button = gameObject.GetComponent<Button>();
             
         if (receiver1 != null)
         {
             var go1 = receiver1;
             UnityAction<GameObject> action1 = new UnityAction<GameObject>(this.OnClickEvent1);
              UnityEventTools.AddObjectPersistentListener<GameObject>(button.onClick, action1, go1);            
         }
             
         if (receiver2 != null)
         {
             var go2 = receiver2;
             UnityAction<GameObject> action2 = new UnityAction<GameObject>(this.OnClickEvent2);
              UnityEventTools.AddObjectPersistentListener<GameObject>(button.onClick, action2, go2);            
         }
             
         if (receiver3 != null)
         {
             var go3 = receiver3;
             UnityAction<GameObject> action3 = new UnityAction<GameObject>(this.OnClickEvent3);
              UnityEventTools.AddObjectPersistentListener<GameObject>(button.onClick, action3, go3);           
         }
 
               Any help is appreciated!
 
                 
                werewrwerf.png 
                (53.6 kB) 
               
 
              
               Comment
              
 
               
               
               Best Answer 
              
 
              Answer by mchts · Apr 30, 2019 at 03:00 PM
Define your button, action1, action2 and action3 globally and move all of your add listener methods inside OnEnable() method (instead of Awake). And then add these lines to your script :
 void OnDisable(){
     UnityEventTools.RemovePersistentListener(button.onClick, action1);
     UnityEventTools.RemovePersistentListener(button.onClick, action2);
     UnityEventTools.RemovePersistentListener(button.onClick, action3);
 }
 
               Now your listeners will be removed every time your scripts done playing!
Answer by x1alphaz1 · Feb 26 at 07:01 AM
this code with give u the number of listerners added
 Button btn;
 Debug.log(btn.onClick.GetPersistentEventCount());
 
              Your answer