Exemplo n.º 1
0
        //-------∽-★-∽------∽-★-∽--------∽-★-∽布局相关∽-★-∽--------∽-★-∽------∽-★-∽--------//


        protected void RefreshAllItemLayout()
        {
            RectTransform listRect = GetComponent <RectTransform>();
            float         right    = 0;
            float         bottom   = 0;

            for (int i = 0; i < m_itemList.Count; i++)
            {
                int index = OffsetItemIndex + i;    //可能有偏移,不是从0开始

                KListItem     item     = m_itemList[i];
                RectTransform itemRect = item.GetComponent <RectTransform>();
                Vector2       pivot    = itemRect.pivot;
                Vector2       position = CalculateItemPosition(index);

                if (item.Visible)
                {
                    //可见时才算入尺寸
                    right  = position.x + m_itemSize.x + m_padding.right;
                    bottom = position.y + m_itemSize.y + m_padding.bottom;
                }

                position.x = position.x + m_itemSize.x * pivot.x;
                position.y = position.y + m_itemSize.y * (1 - pivot.y);
                itemRect.anchoredPosition = new Vector2(position.x, -position.y);

                if (item.Index != index)
                {
                    item.Index = index;
                    item.name  = GenerateItemName(index);
                }
            }
            listRect.sizeDelta = new Vector2(right, bottom);
        }
Exemplo n.º 2
0
        protected void AddItemAt(Type itemType, object data, int index, bool doLayoutImmediately = true)
        {
            if (m_isExecutingCoroutine == true)
            {
                Log.Error("有尚未执行完毕的协程~~", this);
                return;
            }

            //要改成循环利用

            GameObject go = GameObjUtil.Instantiate(m_itemTemplate);

            go.transform.SetParent(this.transform);
            go.transform.localScale    = Vector3.one;
            go.transform.localPosition = Vector3.zero;
            go.SetActive(true);


            //BuildItem(go);
            KListItem item = ComponentUtil.EnsureComponent(go, itemType) as KListItem;

            item.Index = index;
            item.name  = GenerateItemName(index);
            AddItemEventListener(item);
            m_itemList.Insert(index, item);

            item.SetData(data);   //设置数据

            if (doLayoutImmediately)
            {
                RefreshAllItemLayout();
            }
        }
Exemplo n.º 3
0
        public void Reorders(int[] orderArray, bool doLayoutImmediately = true)
        {
            int length     = orderArray.Length;
            int itemsCount = GetItemCount();

            if (length > itemsCount)
            {
                Log.Error(GetType().ToString() + "无效的重排序列表");
                return;
            }
            KListItem[] array = new KListItem[length];
            for (int i = 0; i < length; ++i)
            {
                int oldOrder = orderArray[i];
                if (oldOrder < 0 || oldOrder >= length)
                {
                    Log.Error(GetType().ToString() + "无效的重排序下标");
                    return;
                }
                array[orderArray[i]] = m_itemList[i];
            }
            for (int i = 0; i < length; ++i)
            {
                m_itemList[i] = array[i];
            }
            if (doLayoutImmediately == true)
            {
                RefreshAllItemLayout();
            }
        }
Exemplo n.º 4
0
        protected virtual void OnItemClick(KListItem target, PointerEventData evtData)
        {
            int oldSelectedIndex = SelectedIndex;

            KComponentEvent <int, int> .InvokeEvent(m_onItemClick, m_evtId_click, target.Index);

            KEvtCenter4Lua.AddUIListEvent(m_evtId_click, target.Index);

            if (target == m_selectedItem)
            {
                //已经是当前项
                return;
            }

            bool isSelectedIndexChanged = (SelectedIndex != oldSelectedIndex);

            if (isSelectedIndexChanged == true)
            {
                //若在_onItemClick事件中修改了KList的SelectedIndex,则不再调用后续事件处理
                return;
            }

            if (m_selectedItem != null)
            {
                m_selectedItem.IsSelected = false;
                m_selectedItem            = null;
            }

            m_selectedItem            = target;
            m_selectedItem.IsSelected = true;

            KComponentEvent <int, int> .InvokeEvent(m_onSelectedIndexChanged, m_evtId_change, SelectedIndex);

            KEvtCenter4Lua.AddUIListEvent(m_evtId_change, SelectedIndex);
        }
Exemplo n.º 5
0
        void AddItemEventListener(KListItem item)
        {
            item.onClick.AddListener(OnItemClick);

            if (onDataChange != null)
            {
                item.onDataChange -= onDataChange;
                item.onDataChange += onDataChange;
            }
        }
Exemplo n.º 6
0
 //后滚一页
 void MoveOnePagePrev()
 {
     for (int i = 0; i < m_pageItemCount; i++)
     {
         KListItem item = m_itemList[m_itemList.Count - 1];
         m_itemList.RemoveAt(m_itemList.Count - 1);
         m_itemList.Insert(i, item);
         int dataIndex = m_startDataIndex + i;
         RefreshItem(item, dataIndex);
     }
     RefreshAllItemLayout();
 }
Exemplo n.º 7
0
 //前滚一页
 void MoveOnePageNext()
 {
     for (int i = 0; i < m_pageItemCount; i++)
     {
         KListItem item = m_itemList[0];
         m_itemList.RemoveAt(0);
         m_itemList.Add(item);
         int dataIndex = m_startDataIndex + m_pageItemCount * 2 + i; //跨两页
         RefreshItem(item, dataIndex);
     }
     RefreshAllItemLayout();
 }
Exemplo n.º 8
0
 //刷新单项信息
 void RefreshItem(KListItem item, int dataIndex)
 {
     if (dataIndex < m_dataList.Count)
     {
         item.Visible = true;
         item.SetData(m_dataList[dataIndex]);
     }
     else
     {
         item.Visible = false;
     }
 }
Exemplo n.º 9
0
        void RemoveItem(int index)
        {
            if (m_isSupportSingle == false)
            {
                Log.Error(GetType().ToString() + " 不支持删除Item~~");
                return;
            }

            if (index > m_itemList.Count - 1)
            {
                // 没有这个序号
                return;
            }

            KListItem item = m_itemList[index];

            m_itemList.RemoveAt(index);
            RemoveItemEventListener(item);
            Destroy(item.gameObject);
        }
Exemplo n.º 10
0
 void RemoveItemEventListener(KListItem item)
 {
     item.onClick.RemoveListener(OnItemClick);
     item.onDataChange = null;
 }