在项目开发中经常使用Adpter和ViewHolder,为了简便项目的开发,减少重复代码的编写,现在吧Adapter
和ViewHolder 写成一个工具类代码如下:
ViewHolder.class
package com.testopensourceapplication.Utils; import android.content.Context; import android.graphics.Bitmap; import android.util.SparseArray; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; public class ViewHolder { private SparseArray<View> mViews; private Context mContext; private View mConvertView; private int mPosition; /** * init holder */ public ViewHolder(Context context, int layoutId, ViewGroup parent, int position) { mConvertView = LayoutInflater.from(context).inflate(layoutId,parent,false); mViews = new SparseArray<>(); mPosition = position; mConvertView.setTag(this); } /** * 获取viewHolder */ public static ViewHolder getHolder(Context context, View convertView, int layoutId, ViewGroup parent, int position) { if(convertView == null){// 如果是第一次显示该页面(要记得保存到viewholder中供下次直接从缓存中调用) return new ViewHolder(context,layoutId,parent,position); }else{ ViewHolder holder = (ViewHolder)convertView.getTag(); holder.mPosition = position; return holder; } } public View getConvertView(){ return mConvertView; } /** * get view */ public <T extends View> T getView(int viewId){ View view = mViews.get(viewId); if(view == null){ view = mConvertView.findViewById(viewId); mViews.put(viewId,view); } return (T)view; } /** * set text */ public ViewHolder setText(int viewId, String text){ TextView tv = getView(viewId); tv.setText(text); return this; } /** * set image res */ public ViewHolder setImageResource(int viewId,int resId){ ImageView iv = getView(viewId); iv.setImageResource(resId); return this; } /** * set image bitmap */ public ViewHolder setImageBitmap(int viewId,Bitmap bitmap){ ImageView iv = getView(viewId); iv.setImageBitmap(bitmap); return this; } }
CommonAdapter.class
package com.testopensourceapplication.Utils; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import java.util.List; public abstract class CommonAdapter<T> extends BaseAdapter { protected Context mContext; protected List<T> mData; protected int mLayoutId; public CommonAdapter(Context context,List<T> data,int layoutId){ mContext = context; mData = data; mLayoutId = layoutId; } @Override public int getCount() { return mData.size(); } @Override public T getItem(int i) { return mData.get(i); } @Override public long getItemId(int i) { return i; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = ViewHolder.getHolder(mContext,convertView,mLayoutId,parent,position); convert(holder,position); return holder.getConvertView(); } /** * get holder convert */ public abstract void convert(ViewHolder holder,int position);
上面就是Adapter 和ViewHolder 的工具类,使用代码如下:
Bear.class
package com.testopensourceapplication.model; /** * Created by HE on 2016/11/25. */ public class Bean { private int iconId; private String title; private String content; private String comments; public Bean(int iconId,String title,String content,String comments){ this.iconId = iconId; this.title = title; this.content = content; this.comments = comments; } public int getIconId() { return iconId; } public void setIconId(int iconId) { this.iconId = iconId; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public String getComments() { return comments; } public void setComments(String comments) { this.comments = comments; } }
SearchAdapter.class
package com.testopensourceapplication.Adapter; import android.content.Context; import com.testopensourceapplication.Utils.CommonAdapter; import com.testopensourceapplication.Utils.ViewHolder; import com.testopensourceapplication.model.Bean; import com.testopensourceapplication.uidemo.R; import java.util.List; /** * Created by HE on 2016/11/25. */ public class SearchAdapter extends CommonAdapter<Bean> { public SearchAdapter(Context context, List<Bean> data, int layoutId) { super(context, data, layoutId); } @Override public void convert(ViewHolder holder, int position) { holder.setImageResource(R.id.item_search_iv_icon,mData.get(position).getIconId()) .setText(R.id.item_search_tv_title,mData.get(position).getTitle()) .setText(R.id.item_search_tv_comments,mData.get(position).getComments()) .setText(R.id.item_search_tv_content,mData.get(position).getContent()); } }
Activity
resultAdapter = new SearchAdapter(this, resultData, R.layout.item_bean_list);//這个layout是子布局lvResults.setAdapter(resultAdapter);resultAdapter.notifyDataSetChanged();
好了所有的代码都已经上了,以后在些适配器的时候就只需要继承CommonAdapter
工具类下载地址:http://download.csdn.net/detail/pigseesunset/9695437