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