UI toggle.onValueChanged assigning method via script

Hello.
I’m creating multiple UI toggles at runtime. I want each of them to change a boolean public field of some instance of a class.
Here, I have multiple characters and each toggle should make each of them ‘sleep’ or ‘travel’. But it appears that all the toggles influence only the last created character in a weird way.

foreach (TeamMember tm in dictionaryyy)
{
 // ...
GameObject toggleSleep = (GameObject) GameObject.Instantiate (ToggleSleepPrefab);
				toggleSleep.transform.SetParent (newOutput.transform);
				toggleSleep.GetComponent<Toggle>().onValueChanged.AddListener
				(delegate 
				{	
					if (toggleSleep.GetComponent<Toggle>().isOn)
							tm.setAction(Enums.Actions.Sleep);
						else
							tm.setAction(Enums.Actions.Travel);
				}
				);
}

Oh yeah, tm.setAction(Enums.Actions a) is defined in TeamMember class and it’s just a setter for one variable.

Here’s a screenshot to give you an idea of what I’m talking about.

I’ve never really used delegates, I’ve used events in a simple way a couple of times, that’s it. I’m not an advanced-level programmer, so please try to explain everything :slight_smile:

Thanks very much!

Ok, I made it work, but in a roundabout fashion.
Now each “line” called singleOutput holds the proper character’s ID and then:

				toggleSleep.GetComponent<Toggle>().onValueChanged.RemoveAllListeners();
				toggleSleep.GetComponent<Toggle>().onValueChanged.AddListener
				(delegate 
				{	
						//Debug.Log (toggleSleep.GetComponent<Toggle>().isOn.ToString ());
						if (toggleSleep.GetComponent<Toggle>().isOn)
							teamMembers[toggleSleep.transform.parent.GetComponent<IDholder>().list[0]].setAction(Enums.Actions.Sleep);
						else
							teamMembers[toggleSleep.transform.parent.GetComponent<IDholder>().list[0]].setAction(Enums.Actions.Travel);

				}
				);

Probably the first line showed above isn’t necessary but I’ll just leave it as is. Cheers