public void RefreshUI() { trdLst.Clear(); List <TaskRewardData> finishedLst = new List <TaskRewardData>(); List <TaskRewardData> todoLst = new List <TaskRewardData>(); List <TaskRewardData> doneLst = new List <TaskRewardData>(); //1|0|0 for (int i = 0; i < pd.taskArr.Length; i++) { string[] taskInfo = pd.taskArr[i].Trim().Split('|'); TaskRewardData trd = new TaskRewardData { ID = int.Parse(taskInfo[0]), prgs = int.Parse(taskInfo[1]), taked = taskInfo[2].Equals("1"), }; TaskRewardCfg trc = resSvc.GetTaskRewardCfg(trd.ID); if (trd.prgs == trc.count && !trd.taked) { finishedLst.Add(trd); } else if (trd.taked) { doneLst.Add(trd); } else { todoLst.Add(trd); } } trdLst.AddRange(finishedLst); trdLst.AddRange(todoLst); trdLst.AddRange(doneLst); //Item push into pool while (ScrollTrans.childCount > 0) { GameObject go = ScrollTrans.GetChild(ScrollTrans.childCount - 1).gameObject; go.SetActive(false); go.transform.SetParent(PoolParent); StackPool.Add(go); } //fill the task list for (int i = 0; i < trdLst.Count; i++) { //GameObject go = resSvc.LoadPrefab(PathDefine.TaskItemPrefab); GameObject go = StackPool.Get(); go.transform.SetParent(ScrollTrans); go.transform.localPosition = Vector3.zero; go.transform.localScale = Vector3.one; go.name = "taskItem_" + i; TaskRewardData trd = trdLst[i]; TaskRewardCfg trf = resSvc.GetTaskRewardCfg(trd.ID); SetText(GetTrans(go.transform, "txtName"), trf.taskName); SetText(GetTrans(go.transform, "txtPrg"), trd.prgs + "/" + trf.count); SetText(GetTrans(go.transform, "txtExp"), "奖励: 经验" + trf.exp); SetText(GetTrans(go.transform, "txtCoin"), "金币" + trf.coin); Image imgPrg = GetTrans(go.transform, "prgBar/prgVal").GetComponent <Image>(); float prgVal = trd.prgs * 1.0f / trf.count; imgPrg.fillAmount = prgVal; Button btnTake = GetTrans(go.transform, "btnTake").GetComponent <Button>(); btnTake.onClick.RemoveAllListeners(); btnTake.onClick.AddListener(() => { ClickTakeBtn(go.name); }); Transform transComp = GetTrans(go.transform, "imgComp"); if (trd.taked) { btnTake.interactable = false; SetActive(transComp); } else { SetActive(transComp, false); if (trd.prgs == trf.count) { btnTake.interactable = true; } else { btnTake.interactable = false; } } go.SetActive(true); } }