通用ViewHolder的写法

public class ViewHolder {
    // I added a generic return type to reduce the casting noise in client code
 @SuppressWarnings("unchecked")
    public static <T extends View> T get(View view, int id) {
        SparseArray<View> viewHolder = (SparseArray<View>) view.getTag();
  if (viewHolder == null) {
            viewHolder = new SparseArray<View>();
      view.setTag(viewHolder);
  }

        View childView = viewHolder.get(id);
  if (childView == null) {
            childView = view.findViewById(id);
  viewHolder.put(id, childView);
  }

        return (T) childView;
 }

}

使用范例:

  @Override     public View getView(Context context, View convertView, ViewGroup root) {         View v = null;         if (convertView != null) {             Integer t = (Integer) convertView.getTag(R.id.tag_item_type);             if (t != null && t == MI_TYPE_CONTACT) {                 v = convertView;             }         }         if (v == null) {             v = View.inflate(context, R.layout.item_merge_contact, root);             v.setTag(R.id.tag_item_type, MI_TYPE_CONTACT);         }         TextView nameTV = ViewHolder.get(v, R.id.item_name_tw);         TextView phonesTV = ViewHolder.get(v, R.id.item_phones_tw);         nameTV.setText(mContact.name);         phonesTV.setText(mPhonesText);         return v;     }

你可能感兴趣的:(通用ViewHolder的写法)