/// <summary> /// Initialization when selfInitalize is true. Assumes that data source is set in controller's Awake. /// </summary> private void Initialize() { //Contruct the recycling system. if (Direction == DirectionType.Vertical) { _recyclableScrollRect = new VerticalRecyclingSystem(PrototypeCell, viewport, content, DataSource, IsGrid, Segments); } else if (Direction == DirectionType.Horizontal) { _recyclableScrollRect = new HorizontalRecyclingSystem(PrototypeCell, viewport, content, DataSource, IsGrid, Segments); } vertical = Direction == DirectionType.Vertical; horizontal = Direction == DirectionType.Horizontal; onValueChanged.RemoveListener(OnValueChangedListener); //Adding listener after pool creation to avoid any unwanted recycling behaviour.(rare scenerio) StartCoroutine(_recyclableScrollRect.InitCoroutine(() => onValueChanged.AddListener(OnValueChangedListener) )); }