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