using System; using System.Collections.Generic; namespace AlicizaX.UI { /// /// UGList 基类 /// 提供简化的列表操作接口,封装 RecyclerView 和 Adapter 的交互 /// /// 数据类型 /// 适配器类型 public abstract class UGListBase where TAdapter : Adapter where TData : ISimpleViewData { protected readonly RecyclerView _recyclerView; protected readonly TAdapter _adapter; /// /// 获取关联的 RecyclerView 实例 /// public RecyclerView RecyclerView => _recyclerView; /// /// 构造函数 /// /// RecyclerView 实例 /// 适配器实例 /// 列表项点击回调 public UGListBase(RecyclerView recyclerView, TAdapter adapter, Action onItemClick = null) { _recyclerView = recyclerView; _adapter = adapter; if (_recyclerView != null) { _recyclerView.SetAdapter(_adapter); } if (onItemClick != null) { _adapter.SetOnItemClick(onItemClick); } } /// /// 获取适配器实例 /// public TAdapter Adapter => _adapter; private List _datas; /// /// 获取或设置数据列表 /// 设置时会自动更新适配器 /// public List Data { get => _datas; set { _datas = value; _adapter.SetList(_datas); } } } /// /// 通用列表类 /// 用于显示简单的单一类型数据列表 /// /// 数据类型,必须实现 ISimpleViewData public class UGList : UGListBase> where TData : ISimpleViewData { /// /// 构造函数 /// /// RecyclerView 实例 /// 列表项点击回调 public UGList(RecyclerView recyclerView, Action onItemClick = null) : base(recyclerView, new Adapter(recyclerView), onItemClick) { } } /// /// 分组列表类 /// 用于显示带有分组头的列表数据 /// /// 数据类型,必须实现 IGroupViewData public class UGGroupList : UGListBase> where TData : class, IGroupViewData, new() { /// /// 构造函数 /// /// RecyclerView 实例 /// 分组头视图名称 /// 列表项点击回调 public UGGroupList(RecyclerView recyclerView, string groupViewName, Action onItemClick = null) : base(recyclerView, new GroupAdapter(recyclerView, groupViewName), onItemClick) { } } /// /// 循环列表类 /// 用于实现无限循环滚动的列表 /// /// 数据类型,必须实现 ISimpleViewData public class UGLoopList : UGListBase> where TData : ISimpleViewData, new() { /// /// 构造函数 /// /// RecyclerView 实例 /// 列表项点击回调 public UGLoopList(RecyclerView recyclerView, Action onItemClick = null) : base(recyclerView, new LoopAdapter(recyclerView), onItemClick) { } } /// /// 混合列表类 /// 用于显示多种不同类型的列表项 /// /// 数据类型,必须实现 IMixedViewData public class UGMixedList : UGListBase> where TData : IMixedViewData { /// /// 构造函数 /// /// RecyclerView 实例 /// 列表项点击回调 public UGMixedList(RecyclerView recyclerView, Action onItemClick = null) : base(recyclerView, new MixedAdapter(recyclerView), onItemClick) { } } /// /// UGList 创建辅助类 /// 提供便捷的静态方法来创建各种类型的列表 /// public static class UGListCreateHelper { /// /// 创建通用列表 /// public static UGList Create(RecyclerView recyclerView, Action onItemClick = null) where TData : ISimpleViewData => new UGList(recyclerView, onItemClick); /// /// 创建分组列表 /// public static UGGroupList CreateGroup(RecyclerView recyclerView, string groupViewName, Action onItemClick = null) where TData : class, IGroupViewData, new() => new UGGroupList(recyclerView, groupViewName, onItemClick); /// /// 创建循环列表 /// public static UGLoopList CreateLoop(RecyclerView recyclerView, Action onItemClick = null) where TData : ISimpleViewData, new() => new UGLoopList(recyclerView, onItemClick); /// /// 创建混合列表 /// public static UGMixedList CreateMixed(RecyclerView recyclerView, Action onItemClick = null) where TData : IMixedViewData => new UGMixedList(recyclerView, onItemClick); } }