ExpandListView 多個ItemView的效率優化

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

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

[java] view plaincopy在CODE上查看代碼片派生到我的代碼片

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)); 

大部分人應該都是這麼處理的,我也是這樣處理的!
一次類推如果爲多個責直接擴展爲:

[java] view plaincopy在CODE上查看代碼片派生到我的代碼片

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執行了我想要的結果!

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