diff --git a/Runtime/RecyclerView/RecyclerView.cs b/Runtime/RecyclerView/RecyclerView.cs index cb7df79..249fa0e 100644 --- a/Runtime/RecyclerView/RecyclerView.cs +++ b/Runtime/RecyclerView/RecyclerView.cs @@ -116,7 +116,6 @@ namespace AlicizaX.UI.RecyclerView public int CurrentIndex { get => currentIndex; - set => currentIndex = value; } public bool CanScroll => true; @@ -134,7 +133,7 @@ namespace AlicizaX.UI.RecyclerView public Scrollbar Scrollbar => _scrollbar; - private IAdapter Adapter; + private IAdapter _adapter; public LayoutManager LayoutManager => _layoutManager; @@ -262,12 +261,12 @@ namespace AlicizaX.UI.RecyclerView public void SetAdapter(IAdapter adapter) { - Adapter = adapter; - ViewProvider.Adapter = Adapter; + _adapter = adapter; + ViewProvider.Adapter = _adapter; ViewProvider.LayoutManager = _layoutManager; ViewProvider.LayoutManager = _layoutManager; _layoutManager.RecyclerView = this; - _layoutManager.Adapter = Adapter; + _layoutManager.Adapter = _adapter; _layoutManager.ViewProvider = viewProvider; _layoutManager.Direction = direction; _layoutManager.Alignment = alignment; @@ -355,8 +354,8 @@ namespace AlicizaX.UI.RecyclerView Refresh(); } - index %= Adapter.GetItemCount(); - index = index < 0 ? Adapter.GetItemCount() + index : index; + index %= _adapter.GetItemCount(); + index = index < 0 ? _adapter.GetItemCount() + index : index; if (currentIndex != index) { diff --git a/Runtime/RecyclerView/ViewHolder/ViewHolder.cs b/Runtime/RecyclerView/ViewHolder/ViewHolder.cs index 7ac6062..3f97141 100644 --- a/Runtime/RecyclerView/ViewHolder/ViewHolder.cs +++ b/Runtime/RecyclerView/ViewHolder/ViewHolder.cs @@ -23,26 +23,34 @@ namespace AlicizaX.UI.RecyclerView private set { rectTransform = value; } } - public string Name { get; set; } - public int Index { get; set; } + public string Name { get; internal set; } + public int Index { get; internal set; } public bool ChoiseState { private set; get; } public Vector2 SizeDelta => RectTransform.sizeDelta; + private IButton _button; - public virtual void OnStop() + protected internal virtual void OnStart() { } - public abstract void BindViewData(T data); - - public virtual void BindItemClick(T data, Action action) + protected internal virtual void OnRecycled() { - if (TryGetComponent(out IButton button)) + } + + protected internal abstract void BindViewData(T data); + + protected internal virtual void BindItemClick(T data, Action action) + { + if (_button is null && !TryGetComponent(out _button)) { - button.onClick.RemoveAllListeners(); - button.onClick.AddListener(() => action?.Invoke(data)); + Log.Warning("找不到Button组件"); + return; } + + _button.onClick.RemoveAllListeners(); + _button.onClick.AddListener(() => action?.Invoke(data)); } protected internal void BindChoiceState(bool state) diff --git a/Runtime/RecyclerView/ViewProvider/ViewProvider.cs b/Runtime/RecyclerView/ViewProvider/ViewProvider.cs index 603d0b3..1fb5431 100644 --- a/Runtime/RecyclerView/ViewProvider/ViewProvider.cs +++ b/Runtime/RecyclerView/ViewProvider/ViewProvider.cs @@ -44,11 +44,10 @@ namespace AlicizaX.UI.RecyclerView string viewName = Adapter.GetViewName(i); var viewHolder = Allocate(viewName); - // viewHolder.OnStart(); + viewHolder.OnStart(); viewHolder.Name = viewName; viewHolder.Index = i; viewHolders.Add(viewHolder); - LayoutManager.Layout(viewHolder, i); Adapter.OnBindViewHolder(viewHolder, i); } @@ -66,7 +65,7 @@ namespace AlicizaX.UI.RecyclerView var viewHolder = viewHolders[viewHolderIndex]; viewHolders.RemoveAt(viewHolderIndex); - viewHolder.OnStop(); + viewHolder.OnRecycled(); Free(viewHolder.Name, viewHolder); } }