今天给大家分享一个万能adapter,自认为特别好用,哈哈!
直接上代码
public class TagBaseAdapter extends BaseAdapter { private Context mContext; private List<TagBean> mList; public TagBaseAdapter(Context context,List<TagBean> list){ mContext=context; mList=list; } @Override public int getCount() { return mList.size(); } @Override public Object getItem(int position) { return mList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) { convertView = LayoutInflater.from(mContext).inflate(R.layout.tagview, null); holder = new ViewHolder(); holder.tagBtn = (Button) convertView.findViewById(R.id.tag_btn); convertView.setTag(holder); }else{ holder = (ViewHolder)convertView.getTag(); } TagBean bean = (TagBean) getItem(position); holder.tagBtn.setText(bean.title); if (bean.isCheck){ holder.tagBtn.setBackgroundColor(mContext.getResources().getColor(R.color.colorAccent)); } return convertView; } static class ViewHolder { Button tagBtn; } }
接下来是Holder,里面给控件赋值方法不是很完善,大家需要什么方法可以自己加
public class ViewHolderUtils { private SparseArray<View> mView; private int mPosition; private View mConvertView; public ViewHolderUtils(Context context, ViewGroup parent, int layoutId, int position){ this.mPosition=position; this.mView=new SparseArray<View>(); mConvertView=LayoutInflater.from(context).inflate(layoutId, parent,false); mConvertView.setTag(this); } public static ViewHolderUtils get(Context context,View converView,ViewGroup parent,int layoutId,int position){ if (converView==null) { return new ViewHolderUtils(context, parent, layoutId, position); }else{ ViewHolderUtils holder=(ViewHolderUtils) converView.getTag(); holder.mPosition=position; return holder; } } public <T extends View> T getView(int viewId){ View view=mView.get(viewId); if (view==null) { view=mConvertView.findViewById(viewId); mView.put(viewId, view); } return (T) view; } public View getConvertView(){ return mConvertView; } /** * 设置textview的值 * @param viewId * @param text * @return */ public ViewHolderUtils setText(int viewId,String text){ TextView textView=getView(viewId); textView.setText(text); return this; } /** * 设置textview背景 */ public ViewHolderUtils setTextImageResource(int viewId,int resId){ getView(viewId).setBackgroundResource(resId); return this; } /** * 设置图片 * @param viewId * @param resId * @return */ public ViewHolderUtils setImageResource(int viewId,int resId){ ImageView view=getView(viewId); view.setImageResource(resId); return this; } /** * 设置图片 * @param viewId * @return */ public ViewHolderUtils setImageBitmap(int viewId,Bitmap bitmap){ ImageView view=getView(viewId); view.setImageBitmap(bitmap); return this; } /** * 设置RatingBar显示 */ public ViewHolderUtils setRatingBarText(int viewId,int number){ RatingBar ratingBar=getView(viewId); ratingBar.setRating(number); return this; } }最后就是怎么使用这个自定义adapter,很简单
listView.setAdapter(new CommonAdapter<String>(list,getApplicationContext(),R.layout.item_TextView) { @Override public void convert(ViewHolderUtils holder, final String str, int position) { holder.setText(R.id.tv_tagTitle,str!=null?str:"");
}
});
其中CommonAdapter<String>这个String可以替换成任意的实体类,怎么样,是不是用起来会特别爽
什么!想要点击事件?简单 只需要在convert中这样做就可以了
holder.getView(R.id.btn_cancel)..setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) { } });