/** * @des:添加当前数据索引数据 */ public void AddItem(int dataIndex) { if (dataIndex < 0 || dataIndex > _dataCount) { return; } if (listItem.Count == 0) { createItem(0); setDataCount(_dataCount + 1); setUpdateRectItem(getCurScrollPerLineIndex()); return; } //检测是否需添加gameObject bool isNeedAdd = false; for (int i = listItem.Count - 1; i >= 0; i--) { YYUIWarpContentItem item = listItem [i]; if (item.Index >= (_dataCount - 1)) { isNeedAdd = true; break; } } setDataCount(_dataCount + 1); if (isNeedAdd) { for (int i = 0; i < listItem.Count; i++) { YYUIWarpContentItem item = listItem [i]; int oldIndex = item.Index; if (oldIndex >= dataIndex) { item.Index = oldIndex + 1; } item = null; } setUpdateRectItem(getCurScrollPerLineIndex()); } else { //重新刷新数据 for (int i = 0; i < listItem.Count; i++) { YYUIWarpContentItem item = listItem [i]; int oldIndex = item.Index; if (oldIndex >= dataIndex) { item.Index = oldIndex; } item = null; } } }
public void Init(int dataCount, OnInitializeItem initfun, Action <int> OnReachBottom = null, bool initContentPos = true) { is_init = true; onInitializeItem = initfun; mOnReachBottom = OnReachBottom; if (scrollRect == null || content == null || goItemPrefab == null) { Debug.LogError("异常:请检测<" + gameObject.name + ">对象上UIWarpContent对应ScrollRect、Content、GoItemPrefab 是否存在值...." + scrollRect + " _" + content + "_" + goItemPrefab); return; } // if (dataCount <= 0) //{ // return; //} //是否重置content的位置 if (initContentPos) { InitContent(); } setDataCount(dataCount); scrollRect.onValueChanged.RemoveAllListeners(); scrollRect.onValueChanged.AddListener(onValueChanged); if (listItem == null) { listItem = new List <YYUIWarpContentItem>(); } if (unUseItem == null) { unUseItem = new Queue <YYUIWarpContentItem>(); } unUseItem.Clear(); if (content.childCount > 0) { for (int i = 0; i < content.childCount; i++) { YYUIWarpContentItem item = content.GetChild(i).GetComponent <YYUIWarpContentItem>(); unUseItem.Enqueue(item); item.Index = -10; } } listItem.Clear(); // setUpdateRectItem(getCurScrollPerLineIndex()); }
/** * @des:删除当前数据索引下数据 */ public void DelItem(int dataIndex) { if (dataIndex < 0 || dataIndex >= _dataCount) { return; } //删除item逻辑三种情况 //1.只更新数据,不销毁gameObject,也不移除gameobject //2.更新数据,且移除gameObject,不销毁gameObject //3.更新数据,销毁gameObject bool isNeedDestroyGameObject = (listItem.Count >= _dataCount); setDataCount(_dataCount - 1); for (int i = listItem.Count - 1; i >= 0; i--) { YYUIWarpContentItem item = listItem [i]; int oldIndex = item.Index; if (oldIndex == dataIndex) { listItem.Remove(item); if (isNeedDestroyGameObject) { GameObject.Destroy(item.gameObject); } else { item.Index = -10; //-1 改到 -10 避免下拉的时候被看到 unUseItem.Enqueue(item); } } if (oldIndex > dataIndex) { item.Index = oldIndex - 1; } } setUpdateRectItem(getCurScrollPerLineIndex()); }
/** * @des:设置更新区域内item * 功能: * 1.隐藏区域之外对象 * 2.更新区域内数据 */ public void setUpdateRectItem(int scrollPerLineIndex) { if (scrollPerLineIndex < 0) { return; } curScrollPerLineIndex = scrollPerLineIndex; int startDataIndex = curScrollPerLineIndex * maxPerLine; int endDataIndex = (curScrollPerLineIndex + viewCount) * maxPerLine; //移除 for (int i = listItem.Count - 1; i >= 0; i--) { YYUIWarpContentItem item = listItem[i]; int index = item.Index; if (index < startDataIndex || index >= endDataIndex) { item.Index = -10; //-1 改到 -10 避免下拉的时候被看到 listItem.Remove(item); unUseItem.Enqueue(item); } } //显示 for (int dataIndex = startDataIndex; dataIndex < endDataIndex; dataIndex++) { if (dataIndex >= _dataCount) { continue; } if (isExistDataByDataIndex(dataIndex)) { continue; } createItem(dataIndex); } }