示例#1
0
        /// <summary>
        /// ScrollView的Content
        /// </summary>
        /// <param name="value">value必须是list[AStateBase] 类型 </param>
        private void SetProp_Contents(Transform trans, object value)
        {
            ScrollRectAdaptor srlogic = null;

            if (!srlogicMap.TryGetValue(trans.GetHashCode(), out srlogic))
            {
                var sr = trans.GetComponent <ScrollRect>();
                srlogic = new ScrollRectAdaptor(sr);
                srlogicMap[trans.GetHashCode()] = srlogic;
            }
            //遍历Conent进行赋值操作
            var sourceList = value as IList;
            //这里做适配演示,
            //一般ScrollRect不会把所有的数据加载出来
            var count = Mathf.Max(srlogic.Contents.Count, sourceList.Count);

            for (int i = 0; i < count; i++)
            {
                if (i >= sourceList.Count) //现有列表大于新增列表
                {
                    //删除节点
                    srlogic.Contents[i].Destroy();
                }
                else if (i >= srlogic.Contents.Count) //新增模式
                {
                    var sourceProp = sourceList[i] as PropsBase;
                    //创建component实例
                    var com = Activator.CreateInstance(sourceProp.ComponentType) as IComponent;
                    if (com != null)
                    {
                        if (com.IsLoad) //同步加载
                        {
                            //添加组件
                            srlogic.AddItem(com);
                            //更新组件
                            com.SetProps(sourceProp);
                        }
                    }
                    else
                    {
                        BDebug.LogError("【类型出错】该类型不是组件:" + sourceProp.ComponentType);
                    }
                }
                else //更新模式
                {
                    //TODO 这里更新模式一般不这么强制更新,
                    //最好自己做算法索引,动态调整item的位置,
                    //不要每个重新设置
                    var source = sourceList[i] as PropsBase;
                    var com    = srlogic.GetItem(i);
                    com.SetProps(source);
                }
            }
            //移除无效component
            srlogic.RemoveUnInvalidComponent();
        }
        /// <summary>
        /// ScrollView的Content
        /// </summary>
        /// <param name="value">value必须是ComponentList 类型 </param>
        private void SetProp_Contents(Transform trans, object value)
        {
            ScrollRectAdaptor scrollRectAdaptor = null;

            if (!srlogicMap.TryGetValue(trans, out scrollRectAdaptor))
            {
                var sr = trans.GetComponent <ScrollRect>();
                scrollRectAdaptor = new ScrollRectAdaptor(sr);
                srlogicMap[trans] = scrollRectAdaptor;
            }

            //这里用协变能保证一定转型成功
            var propsList = value as IPropsList;
            /**********************增***********************/
            var list = propsList.GetNewDatas();

            foreach (var props in list)
            {
                //创建component实例
                var com = Activator.CreateInstance(props.ComponentType) as IComponent;
                if (com != null)
                {
                    if (com.IsLoad) //同步加载
                    {
                        //添加组件
                        scrollRectAdaptor.AddItem(props, com);
                        //更新组件
                        com.SetProps(props);
                    }
                }
                else
                {
                    BDebug.LogError("【类型出错】该类型不是组件:" + props.ComponentType);
                }
            }

            /**********************改***********************/
            list = propsList.GetChangedDatas();
            foreach (var props in list)
            {
                //刷新节点
                var com = scrollRectAdaptor.GetItem(props);
                com.SetProps(props);
            }

            /**********************删***********************/
            list = propsList.GetRemovedDatas();
            foreach (var props in list)
            {
                //删除节点
                scrollRectAdaptor.Destroy(props);
            }
        }