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) { _recyclerView = recyclerView; _adapter = adapter; if (_recyclerView != null) { _recyclerView.SetAdapter(_adapter); } } public TAdapter Adapter => _adapter; public void RegisterItemRender(string viewName = "") where TItemRender : IItemRender { _adapter.RegisterItemRender(viewName); } public void RegisterItemRender(Type itemRenderType, string viewName = "") { _adapter.RegisterItemRender(itemRenderType, viewName); } public bool UnregisterItemRender(string viewName = "") { return _adapter.UnregisterItemRender(viewName); } 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 { public UGList(RecyclerView recyclerView) : base(recyclerView, new Adapter(recyclerView)) { } } public class UGGroupList : UGListBase> where TData : class, IGroupViewData, new() { public UGGroupList(RecyclerView recyclerView, string groupViewName) : base(recyclerView, new GroupAdapter(recyclerView, groupViewName)) { } } public class UGLoopList : UGListBase> where TData : ISimpleViewData, new() { public UGLoopList(RecyclerView recyclerView) : base(recyclerView, new LoopAdapter(recyclerView)) { } } public class UGMixedList : UGListBase> where TData : IMixedViewData { public UGMixedList(RecyclerView recyclerView) : base(recyclerView, new MixedAdapter(recyclerView)) { } } public static class UGListCreateHelper { public static UGList Create(RecyclerView recyclerView) where TData : ISimpleViewData => new UGList(recyclerView); public static UGGroupList CreateGroup(RecyclerView recyclerView, string groupViewName) where TData : class, IGroupViewData, new() => new UGGroupList(recyclerView, groupViewName); public static UGLoopList CreateLoop(RecyclerView recyclerView) where TData : ISimpleViewData, new() => new UGLoopList(recyclerView); public static UGMixedList CreateMixed(RecyclerView recyclerView) where TData : IMixedViewData => new UGMixedList(recyclerView); } }