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);
}
}