using System; using System.Collections.Generic; namespace AlicizaX.UI { public abstract class UGListBase where TAdapter : Adapter where TData : ISimpleViewData { protected readonly RecyclerView _recyclerView; protected readonly TAdapter _adapter; public 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); } } } public class UGList : UGListBase> where TData : ISimpleViewData { public UGList(RecyclerView recyclerView, Action onItemClick = null) : base(recyclerView, new Adapter(recyclerView), onItemClick) { } } public class UGGroupList : UGListBase> where TData : class, IGroupViewData, new() { public UGGroupList(RecyclerView recyclerView, string groupViewName, Action onItemClick = null) : base(recyclerView, new GroupAdapter(recyclerView, groupViewName), onItemClick) { } } public class UGLoopList : UGListBase> where TData : ISimpleViewData, new() { public UGLoopList(RecyclerView recyclerView, Action onItemClick = null) : base(recyclerView, new LoopAdapter(recyclerView), onItemClick) { } } public class UGMixedList : UGListBase> where TData : IMixedViewData { public UGMixedList(RecyclerView recyclerView, Action onItemClick = null) : base(recyclerView, new MixedAdapter(recyclerView), onItemClick) { } } public static class UGList { 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); } }