- Home /
Button Delegate running more than once
The method I found that worked well to pass functions with arguments was using Addlistener, delegates. But I ran into a problem using delegate inside another.
I created two buttons, (button1 and button2) and applied this code to main camera
using UnityEngine; using System.Collections; using UnityEngine.UI; using UnityEngine.EventSystems;
public class ButtonControl : MonoBehaviour {
public Button Button1;
public Button Button2;
// Use this for initialization
void Start () {
int local_i = 5;
Button1.GetComponent<Button>().onClick.AddListener(delegate{ Job1(local_i); });
}
void Job1(int jobNo){
int j = 60;
Debug.Log ("You gave me Job no. " + jobNo);
Button2.GetComponent<Button>().onClick.AddListener(delegate{ SumTest (jobNo, j); });
}
void SumTest(int i, int j)
{
Debug.Log (i + " + " + j + " = " + (i + j));
}
}
When I press Button1 and then Button2 the program works fine, but when I press the button1 again and then button2, the SumTest function runs twice. And on the third time, it runs thrice, the button has been clicked only once though. How can I remedy it? I am not a pro programmer, mostly writing codes on what works basis :). Here is the screenshot of the problem.
Answer by jenci1990 · Jun 18, 2015 at 05:30 PM
you add new listener every time when you press Button1. Try remove all listener from button2:
void Job1(int jobNo){
int j = 60;
Debug.Log ("You gave me Job no. " + jobNo);
Button2.GetComponent<Button>().onClick.RemoveAllListeners();
Button2.GetComponent<Button>().onClick.AddListener(delegate{ SumTest (jobNo, j); });
}
Thanks, worked very nicely. Do I have to remove listeners for every buttons I create? or is it for just the ones I use delegate? I am using a lot of ui buttons with listener in each.
Your answer
Follow this Question
Related Questions
add delegate to toggle in unity 4.6 UI 2 Answers
Creating a button, giving it a delegate (or Action), and giving that delegate a reference parameter 0 Answers
Method added on a button click with a delegate is being called twice. 0 Answers
Button onClick delegate with toggling method assignment 0 Answers
Button Listener Takes Reference But I Want to Pass Value? 1 Answer