/* Store the contents for ListBoxes to display. */ using System.Collections.Generic; using UnityEngine; namespace Demo { // LoopListBankData public class LoopListBankData { public object Content; public string UniqueID = ""; public bool IsEmpty() { if(null == Content || string.IsNullOrEmpty(UniqueID)) { return true; } return false; } } /* The base class of the list content container * * Create the individual ListBank by inheriting this class */ public abstract class LoopListBankBase : MonoBehaviour { // Init DataList public abstract List InitLoopListBankDataList(); // Get Data count in list public abstract int GetListLength(); // Get Data in list by index public abstract LoopListBankData GetLoopListBankData(int index); // Get All Data in list public abstract List GetLoopListBankDatas(); // Set Data into list public abstract void SetLoopListBankDatas(List newDatas); // Get cell preferred type index by index public abstract int GetCellPreferredTypeIndex(int index); // Get cell preferred size by index public abstract Vector2 GetCellPreferredSize(int index); } /* The example of the ListBank */ public class LoopListBank : LoopListBankBase { private List m_ContentsForInitData = new List { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; private List _LoopListBankDataList; private List m_LoopListBankDataList { get { if (_LoopListBankDataList == null) { _LoopListBankDataList = new List(); _LoopListBankDataList = InitLoopListBankDataList(); } return _LoopListBankDataList; } set { _LoopListBankDataList = value; } } // Cell Sizes public List m_CellSizes = new List { new Vector2(120, 120), new Vector2(170, 120), new Vector2(220, 120) }; public override List InitLoopListBankDataList() { m_LoopListBankDataList.Clear(); LoopListBankData TempCustomData = null; for (int i = 0; i < m_ContentsForInitData.Count; ++i) { TempCustomData = new LoopListBankData(); TempCustomData.Content = m_ContentsForInitData[i]; TempCustomData.UniqueID = System.Guid.NewGuid().ToString(); m_LoopListBankDataList.Add(TempCustomData); } return m_LoopListBankDataList; } public override int GetListLength() { return m_LoopListBankDataList.Count; } public override LoopListBankData GetLoopListBankData(int index) { if (m_LoopListBankDataList.Count <= index) { return new LoopListBankData(); } return m_LoopListBankDataList[index]; } public override List GetLoopListBankDatas() { return m_LoopListBankDataList; } public override void SetLoopListBankDatas(List newDatas) { m_LoopListBankDataList = newDatas; } public int FindUniqueID(string UniqueID) { if(string.IsNullOrEmpty(UniqueID)) { return -1; } for(int i=0;i newContents) { m_ContentsForInitData = newContents; InitLoopListBankDataList(); } public override int GetCellPreferredTypeIndex(int index) { return 0; } public override Vector2 GetCellPreferredSize(int index) { int ResultIndex = GetCellPreferredTypeIndex(index); Vector2 FinalValue = m_CellSizes[ResultIndex]; return FinalValue; } } }