ListCellView ActiveCell(int index) { ListCellView cellView; if (m_UnuseCells.Count <= 0) { ListCellView cellView_ = DynamicCell().GetComponent <ListCellView>(); cellView_.InitView(); m_UnuseCells.Add(cellView_); } cellView = m_UnuseCells[0]; cellView.index = index; m_UnuseCells.Remove(cellView); //if (m_VisiableCells.IndexOf(cellView) == -1) { m_VisiableCells.Add(cellView); } Vector3 pos = Vector3.zero; switch (m_Orientation) { case ListViewOrientation.Horizontal: pos = new Vector3(1, 0, 0); break; case ListViewOrientation.Vertical: pos = new Vector3(0, -1, 0); break; } float d = m_CellOffset + index * (m_CellSize + m_CellSpacing); cellView.transform.localPosition = pos * d; cellView.gameObject.SetActive(true); return(cellView); }
private void Awake() { m_ListRect = GetComponent <RectTransform>(); Transform cells = transform.Find("Cells"); m_Cells = cells; m_ListCellsRect = cells.GetComponent <RectTransform>(); ListCellView[] cellViews = cells.GetComponentsInChildren <ListCellView>(); m_DynamicCell = cellViews[0].gameObject; m_DynamicCellRect = m_DynamicCell.GetComponent <RectTransform>(); int needCellNum = ComputeVisiableNum(); for (int i = 0; i < cellViews.Length; i++) { cellViews[i].gameObject.SetActive(false); cellViews[i].Init(this); cellViews[i].InitView(); m_UnuseCells.Add(cellViews[i]); } for (int i = 0; i < needCellNum - cellViews.Length; i++) { ListCellView cellView = DynamicCell().GetComponent <ListCellView>(); cellView.Init(this); cellView.InitView(); m_UnuseCells.Add(cellView); } Assembly assembly = Assembly.GetExecutingAssembly(); m_object = assembly.CreateInstance(viewName); m_objectType = Type.GetType(viewName); InitView(); }
void DeactiveCell(ListCellView cellView) { cellView.index = -1; m_VisiableCells.Remove(cellView); cellView.CloseView(); cellView.gameObject.SetActive(false); //if (m_UnuseCells.IndexOf(cellView) == -1) { m_UnuseCells.Add(cellView); } }
void UpdateList(bool forceUpdateCells = false) { UpdateCellsRect(); int pos = ComputeCurrentPosition(); pos--; if (pos < 0) { pos = 0; } int num = ComputeVisiableNum(); float offset = m_StartPadding + pos * (m_CellSize + m_CellSpacing); float cellPos = 0; if (pos != m_LastPosition || num != m_LastVisiableNum || forceUpdateCells) { ListCellView[] cells = new ListCellView[num]; List <ListCellView> unuse = new List <ListCellView>(); for (int i = 0; i < m_VisiableCells.Count; i++) { ListCellView cellView = m_VisiableCells[i]; int p = cellView.index - pos; if (cellView.index > -1 && cellView.index < m_DataSize && p > -1 && p < cells.Length) { cells[p] = cellView; } else { unuse.Add(cellView); } } for (int i = 0; i < unuse.Count; i++) { DeactiveCell(unuse[i]); } for (int i = 0; i < cells.Length; i++) { if (pos + i >= 0 && pos + i < m_DataSize && cells[i] == null) { cells[i] = ActiveCell(pos + i); cells[i].DrawCell(handle, cells[i].index); } else if (cells[i] != null) { if (forceUpdateCells) { cells[i].DrawCell(handle, cells[i].index); } } } } m_LastPosition = pos; m_LastVisiableNum = num; }