viewholder:
import android.content.Context; import android.util.SparseArray; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; public class ViewHolder { private final SparseArray<View> sparseVies; private View convertView; private int mPosition; private ViewHolder(Context context, int itemResourceId,int position) { sparseVies = new SparseArray<View>(); convertView = LayoutInflater.from(context).inflate(itemResourceId, null); this.mPosition = position; convertView.setTag(this); } private ViewHolder(Context context, int itemResourceId,ViewGroup viewGroup,int position) { sparseVies = new SparseArray<View>(); convertView = LayoutInflater.from(context).inflate(itemResourceId, viewGroup,false); this.mPosition = position; convertView.setTag(this); } public static ViewHolder get(Context context, View convertView, int itemResourceId,int position) { if (convertView == null) { return new ViewHolder(context, itemResourceId,position); } ViewHolder holder = (ViewHolder) convertView.getTag(); holder.mPosition = position; return holder; //return (ViewHolder) convertView.getTag(); } public static ViewHolder get(Context context, View convertView, int itemResourceId, ViewGroup viewgroup,int position) { if (convertView == null) { return new ViewHolder(context, itemResourceId,viewgroup,position); } ViewHolder holder = (ViewHolder) convertView.getTag(); holder.mPosition = position; return holder; //return (ViewHolder) convertView.getTag(); } public <T extends View> T getView(int viewId) { View view = sparseVies.get(viewId); if (view == null) { view = convertView.findViewById(viewId); sparseVies.put(viewId, view); } return (T) view; } public ViewHolder setTextView(int viewId, String text) { TextView view = getView(viewId); view.setText(text); return this; } public <T extends View> T findViewById(int viewId) { return getView(viewId); } public View getConvertView() { return convertView; } }
adapter:
import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; import java.util.List; public abstract class ComAdapter<T> extends BaseAdapter { private LayoutInflater mInflater; private List<T> mList; private Context mContext; protected int mItemLayoutId; public ComAdapter(Context context,List<T> mlist,int mItemLayoutId){ this.mInflater = LayoutInflater.from(context); this.mList = mlist; this.mContext = context; this.mItemLayoutId = mItemLayoutId; } public List<T> getList() { return mList; } @Override public int getCount() { // TODO Auto-generated method stub return mList == null ? 0 : mList.size(); } @Override public T getItem(int position) { // TODO Auto-generated method stub if (position > mList.size() - 1) { return null; } return mList.get(position); //return mList.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { //初始化ViewHolder ViewHolder holder = ViewHolder.get(mContext, convertView, mItemLayoutId, parent, position); convert(holder, getItem(position)); return holder.getConvertView() ; } public abstract void convert(ViewHolder holder, T item); /* 可添加别的方法 */ }
使用方法:
注意:Bean为自己创建的类。
mListView为listview
mMainAdapterbean = new ComAdapter<Bean>(this,mListbean,R.layout.item_listview){//抽象类不可以直接实例化,但可以实例化方法 @Override public void convert(ViewHolder myViewHolder, Bean user) { ((TextView) myViewHolder.findViewById(R.id.id_title)).setText(user.getTitle()); ((TextView) myViewHolder.findViewById(R.id.id_desc)).setText( user.getDesc()); ((TextView) myViewHolder.findViewById(R.id.id_time)).setText(user.getTime()); ((TextView) myViewHolder.findViewById(R.id.id_phone)).setText(user.getPhone()); } }; mListView.setAdapter(mMainAdapterbean);