Android開發庫VUtils之ViewHolder

Andorid中實現Adapter時,在getView中創建ViewHolder已成了約定俗成的事。那麼怎麼寫才能讓代碼看起來更簡單呢?

package com.v.vutils.utils;

import android.view.View;

import java.util.HashMap;

public class ViewHolder {
    public static <T extends View> T get(View view, int id) {
        HashMap<Integer, View> viewMap = (HashMap<Integer, View>) view.getTag();
        if (viewMap == null) {
            viewMap = new HashMap<Integer, View>();
            view.setTag(viewMap);
        }
        View childView = viewMap.get(id);
        if (childView == null) {
            childView = view.findViewById(id);
            viewMap.put(id, childView);
        }
        return (T) childView;
    }
}

Adapter的getView方法中使用:

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            if (convertView == null) {
                convertView = LayoutInflater.from(getContext()).inflate(R.layout.item_main, null);
            }

            FeatureModule model = getItem(position);
            ((ImageView) ViewHolder.get(convertView, R.id.im_item_iv))
                    .setImageResource(model.icon);
            ((TextView) ViewHolder.get(convertView, R.id.im_title_tv))
                    .setText(model.title);
            ((TextView) ViewHolder.get(convertView, R.id.im_sub_title_tv))
                    .setText(model.description);

            return convertView;
        }

是不是覺得很簡單,再也不用爲每一個Adapter單獨創建ViewHolder了。

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