using System; using System.Collections.Generic; namespace AlicizaX.UI { /// /// 封装 RecyclerView 与 Adapter 的通用列表基类。 /// /// 列表数据类型。 /// 适配器类型。 public abstract class UGListBase where TAdapter : Adapter where TData : ISimpleViewData { /// /// 关联的 RecyclerView 实例。 /// protected readonly RecyclerView _recyclerView; /// /// 当前列表使用的适配器实例。 /// protected readonly TAdapter _adapter; /// /// 获取当前绑定的 RecyclerView。 /// public RecyclerView RecyclerView => _recyclerView; /// /// 初始化列表封装并将适配器绑定到 RecyclerView。 /// /// 目标 RecyclerView。 /// 用于驱动列表渲染的适配器。 public UGListBase(RecyclerView recyclerView, TAdapter adapter) { _recyclerView = recyclerView; _adapter = adapter; if (_recyclerView != null) { _recyclerView.SetAdapter(_adapter); } } /// /// 获取当前列表使用的适配器。 /// public TAdapter Adapter => _adapter; /// /// 注册指定视图类型对应的 ItemRender。 /// /// ItemRender 类型。 /// 视图名称;为空时表示默认视图。 public void RegisterItemRender(string viewName = "") where TItemRender : ItemRenderBase { _adapter.RegisterItemRender(viewName); } /// /// 按运行时类型注册指定视图对应的 ItemRender。 /// /// ItemRender 的运行时类型。 /// 视图名称;为空时表示默认视图。 public void RegisterItemRender(Type itemRenderType, string viewName = "") { _adapter.RegisterItemRender(itemRenderType, viewName); } /// /// 注销指定视图名称对应的 ItemRender 注册。 /// /// 视图名称;为空时表示默认视图。 /// 是否成功移除对应注册。 public bool UnregisterItemRender(string viewName = "") { return _adapter.UnregisterItemRender(viewName); } /// /// 清空当前列表的全部 ItemRender 注册信息。 /// public void ClearItemRenderRegistrations() { _adapter.ClearItemRenderRegistrations(); } /// /// 当前持有的数据集合引用。 /// private List _datas; /// /// 获取或设置当前列表数据。 /// /// /// 设置数据时会同步调用适配器刷新列表内容。 /// public List Data { get => _datas; set { _datas = value; _adapter.SetList(_datas); } } } /// /// 提供单模板列表的便捷封装。 /// /// 列表数据类型。 public class UGList : UGListBase> where TData : ISimpleViewData { /// /// 初始化单模板列表。 /// /// 目标 RecyclerView。 public UGList(RecyclerView recyclerView) : base(recyclerView, new Adapter(recyclerView)) { } } /// /// 提供分组列表的便捷封装。 /// /// 分组列表数据类型。 public class UGGroupList : UGListBase> where TData : class, IGroupViewData, new() { /// /// 初始化分组列表。 /// /// 目标 RecyclerView。 /// 分组头使用的模板名称。 public UGGroupList(RecyclerView recyclerView, string groupViewName) : base(recyclerView, new GroupAdapter(recyclerView, groupViewName)) { } } /// /// 提供循环列表的便捷封装。 /// /// 循环列表数据类型。 public class UGLoopList : UGListBase> where TData : ISimpleViewData, new() { /// /// 初始化循环列表。 /// /// 目标 RecyclerView。 public UGLoopList(RecyclerView recyclerView) : base(recyclerView, new LoopAdapter(recyclerView)) { } } /// /// 提供多模板列表的便捷封装。 /// /// 多模板列表数据类型。 public class UGMixedList : UGListBase> where TData : IMixedViewData { /// /// 初始化多模板列表。 /// /// 目标 RecyclerView。 public UGMixedList(RecyclerView recyclerView) : base(recyclerView, new MixedAdapter(recyclerView)) { } } /// /// 提供常用 UGList 类型的快速创建方法。 /// public static class UGListCreateHelper { /// /// 创建单模板列表封装。 /// /// 列表数据类型。 /// 目标 RecyclerView。 /// 创建后的单模板列表实例。 public static UGList Create(RecyclerView recyclerView) where TData : ISimpleViewData => new UGList(recyclerView); /// /// 创建分组列表封装。 /// /// 分组列表数据类型。 /// 目标 RecyclerView。 /// 分组头使用的模板名称。 /// 创建后的分组列表实例。 public static UGGroupList CreateGroup(RecyclerView recyclerView, string groupViewName) where TData : class, IGroupViewData, new() => new UGGroupList(recyclerView, groupViewName); /// /// 创建循环列表封装。 /// /// 循环列表数据类型。 /// 目标 RecyclerView。 /// 创建后的循环列表实例。 public static UGLoopList CreateLoop(RecyclerView recyclerView) where TData : ISimpleViewData, new() => new UGLoopList(recyclerView); /// /// 创建多模板列表封装。 /// /// 多模板列表数据类型。 /// 目标 RecyclerView。 /// 创建后的多模板列表实例。 public static UGMixedList CreateMixed(RecyclerView recyclerView) where TData : IMixedViewData => new UGMixedList(recyclerView); } }