Exemplo n.º 1
0
    /**
     * @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;
            }
        }
    }
Exemplo n.º 2
0
    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());
    }
Exemplo n.º 3
0
    /**
     * @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());
    }
Exemplo n.º 4
0
    /**
     * @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);
        }
    }