ExpandListView 多個ItemView的效率優化

最近在項目遇到一個問題,就是在ExpandListView中有多個ItemView和groupView  每次都需要初始化,這個效率只能呵呵了!思路是如此出發的!

以前我們使用在一個Listview只有單個itemView優化如下!

	FitListViewHolder viewHolder;
		if (convertView == null) {
			convertView = LayoutInflater.from(context).inflate(
					R.layout.fitlistitem, null);
			viewHolder = new FitListViewHolder(convertView, context);
			convertView.setTag(viewHolder);
		} else {
			viewHolder = (FitListViewHolder) convertView.getTag();
		}

		// 裝載數據
		viewHolder.setContent(yiLists.get(position));

大部分人應該都是這麼處理的,我也是這樣處理的!

一次類推如果爲多個責直接擴展爲:

 if (symptomResultType == SymptomResultType.SYMPTOM_TYPE_COMMON_METHOD) {
            CommonMethodViewHolder viewHolder;
            if(convertView == null || !(convertView.getTag() instanceof CommonMethodViewHolder)) {
                convertView = LayoutInflater.from(mContext).inflate(R.layout.list_item_common_method, null);
                viewHolder = new CommonMethodViewHolder(convertView, mContext);
                convertView.setTag(viewHolder);
            }else{
                viewHolder = (CommonMethodViewHolder) convertView.getTag();
            }
            Object[] userMethods = userSymptomResultModel.userMethodDatas.toArray();
            viewHolder.setMethodContent((UserMethod) userMethods[childPosition]);
            return convertView;
        } else if (symptomResultType == SymptomResultType.SYMPTOM_TYPE_HABIT) {
            UserHabitViewHolder viewHolder;
            if(convertView == null || !(convertView.getTag() instanceof UserHabitViewHolder)) {
                convertView = LayoutInflater.from(mContext).inflate(R.layout.list_item_habit, null);
                viewHolder = new UserHabitViewHolder(convertView, mContext);
                convertView.setTag(viewHolder);
            }else{
                viewHolder = (UserHabitViewHolder) convertView.getTag();
            }
            Object[] userHabits = userSymptomResultModel.userHabitDatas.toArray();
            viewHolder.setHabitContent((UserHabit) userHabits[childPosition]);
            return convertView;
        }

中心思想就是根據contentView是否爲空或者不爲空的情況下獲取gettag然後看看是否是當前item需要的View,如果不是責再去創建。根據tag去獲取就OK了!

debug執行了我想要的結果!


歡迎大家拍磚!



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章