80 lines
1.6 KiB
C#
80 lines
1.6 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
public abstract class UIListView<T> : MonoBehaviour, IListView where T : UIListCell
|
|
{
|
|
public abstract int Count
|
|
{
|
|
get;
|
|
}
|
|
|
|
[SerializeField] GameObject mTplCell;
|
|
[SerializeField] Transform mCtnCells;
|
|
|
|
protected List<T> mCellList;
|
|
|
|
public virtual void Show(bool pShow)
|
|
{
|
|
gameObject.SetActive(pShow);
|
|
}
|
|
|
|
public virtual void LoadData()
|
|
{
|
|
if (mCellList == null)
|
|
{
|
|
mCellList = new List<T>();
|
|
}
|
|
|
|
for (int i = 0; i < Count; i++)
|
|
{
|
|
T tCell = null;
|
|
if (i < mCellList.Count)
|
|
{
|
|
tCell = mCellList[i];
|
|
}
|
|
else
|
|
{
|
|
tCell = SpawnCell();
|
|
mCellList.Add(tCell);
|
|
}
|
|
|
|
tCell.gameObject.SetActive(true);
|
|
tCell.SetIndex(i);
|
|
ConfigCell(tCell);
|
|
}
|
|
|
|
HideUnused();
|
|
}
|
|
|
|
public virtual void ClearSelection()
|
|
{
|
|
|
|
}
|
|
|
|
protected abstract void ConfigCell(T pCell);
|
|
|
|
private T SpawnCell()
|
|
{
|
|
GameObject tCellOb = Instantiate(mTplCell, mCtnCells);
|
|
|
|
tCellOb.transform.localScale = Vector3.one;
|
|
|
|
return tCellOb.GetComponent<T>();
|
|
}
|
|
|
|
private void HideUnused()
|
|
{
|
|
for (int i = Count; i < mCellList.Count; i++)
|
|
{
|
|
mCellList[i].gameObject.SetActive(false);
|
|
}
|
|
}
|
|
}
|
|
|
|
public interface IListView
|
|
{
|
|
void Show(bool pShow);
|
|
void LoadData();
|
|
void ClearSelection();
|
|
} |