// 本脚本只在不存在时会生成一次。组件逻辑写在当前脚本内。已存在不会再次生成覆盖 using System; using System.Collections.Generic; using UnityEngine; using FairyGUI; using NBC; namespace NBF { public partial class ClassifyList : GComponent { private readonly List _listData = new List(); public event Action OnClickItem; private void OnInited() { List.itemProvider = GetListItemResource; List.itemRenderer = OnRenderItem; List.onClickItem.Add(OnClickListItem); } public void SetListData(List listData,ListSelectionMode selectionMode = ListSelectionMode.Single) { _listData.Clear(); foreach (var obj in listData) { _listData.Add(obj); } List.selectionMode = selectionMode; List.numItems = _listData.Count; List.ScrollToView(0); } void OnClickListItem(EventContext context) { OnClickItem?.Invoke(context.data); } void OnRenderItem(int index, GObject obj) { if (obj is ListItemBase item) { item.SetData(_listData[index]); } } //根据索引的不同,返回不同的资源URL string GetListItemResource(int index) { var itemData = _listData[index]; if (itemData is ShopGearData shopItem) { return ShopGearItem.URL; } if (itemData is ListClassifyData item) { return ListTitleItem.URL; } return List.defaultItem; } } }