2025-03-12 20:59:12 +08:00
|
|
|
using System;
|
2025-05-28 19:37:38 +08:00
|
|
|
using SimpleObjectPool;
|
2025-03-12 20:59:12 +08:00
|
|
|
|
|
|
|
namespace AlicizaX.UI.RecyclerView
|
|
|
|
{
|
|
|
|
public sealed class SimpleViewProvider : ViewProvider
|
|
|
|
{
|
2025-05-28 19:37:38 +08:00
|
|
|
private readonly IObjectPool<ViewHolder> objectPool;
|
2025-03-12 20:59:12 +08:00
|
|
|
|
|
|
|
public SimpleViewProvider(RecyclerView recyclerView, ViewHolder[] templates) : base(recyclerView, templates)
|
|
|
|
{
|
2025-05-28 19:37:38 +08:00
|
|
|
UnityComponentFactory<ViewHolder> factory = new(GetTemplate(), recyclerView.Content);
|
|
|
|
objectPool = new ObjectPool<ViewHolder>(factory, 100);
|
2025-03-12 20:59:12 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
public override ViewHolder GetTemplate(string viewName = "")
|
|
|
|
{
|
|
|
|
if (templates == null || templates.Length == 0)
|
|
|
|
{
|
|
|
|
throw new NullReferenceException("ViewProvider templates can not null or empty.");
|
|
|
|
}
|
|
|
|
return templates[0];
|
|
|
|
}
|
|
|
|
|
|
|
|
public override ViewHolder[] GetTemplates()
|
|
|
|
{
|
|
|
|
if (templates == null || templates.Length == 0)
|
|
|
|
{
|
|
|
|
throw new NullReferenceException("ViewProvider templates can not null or empty.");
|
|
|
|
}
|
|
|
|
return templates;
|
|
|
|
}
|
|
|
|
|
|
|
|
public override ViewHolder Allocate(string viewName)
|
|
|
|
{
|
2025-05-28 19:37:38 +08:00
|
|
|
var viewHolder = objectPool.Allocate();
|
|
|
|
viewHolder.gameObject.SetActive(true);
|
|
|
|
return viewHolder;
|
2025-03-12 20:59:12 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
public override void Free(string viewName, ViewHolder viewHolder)
|
|
|
|
{
|
2025-05-28 19:37:38 +08:00
|
|
|
objectPool.Free(viewHolder);
|
2025-03-12 20:59:12 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
public override void Reset()
|
|
|
|
{
|
|
|
|
Clear();
|
2025-05-28 19:37:38 +08:00
|
|
|
objectPool.Dispose();
|
2025-03-12 20:59:12 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|