通用Adapter
来源:互联网 发布:python 打开cmd窗口 编辑:程序博客网 时间:2024/05/14 12:37
1.修改一下,主要之前写的不适合,多item的情况
1.1Adapter
添加了多个item的接口,根据单个Item或者多个item选择不同的构造方法
逻辑写在convert中,需要position直接get没有传position
public abstract class CommonAapter<T> extends BaseAdapter { protected LayoutInflater mInflater; protected Context mContext; protected List<T> mDatas; protected int mItemLayoutId; private int mPostion; public CommonAapter(Context context,List<T> datas,int itemLayoutId){ mContext=context; mInflater=LayoutInflater.from(mContext); mDatas=datas; mItemLayoutId=itemLayoutId; } public void setmDatas(List<T> list){ mDatas=list; notifyDataSetChanged(); } public void addData(T t){ mDatas.add(t); notifyDataSetChanged(); } @Override public int getCount() { return mDatas.size(); } @Override public T getItem(int position) { return mDatas.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { mPostion=position; if(mMultiItemSupport!=null){//多视图 ViewHolder viewHolder=null; if(convertView!=null) { viewHolder= (ViewHolder) convertView.getTag(); if(viewHolder.getLaoutId() != mMultiItemSupport.getLayoutId(position,getItem(position))){ viewHolder= ViewHolder.get(mContext, convertView, parent, mMultiItemSupport.getLayoutId(position,getItem(position)), position); } }else { viewHolder= ViewHolder.get(mContext, convertView, parent, mMultiItemSupport.getLayoutId(position,getItem(position)), position); } convert(viewHolder,getItem(position)); return viewHolder.getmConvertView(); }else {//单个ID final ViewHolder viewHolder=getViewHolder(position,convertView,parent); convert(viewHolder,getItem(position)); return viewHolder.getmConvertView(); } } public abstract void convert(ViewHolder viewHelper,T item); private ViewHolder getViewHolder(int position, View convertView, ViewGroup parent) { return ViewHolder.get(mContext, convertView, parent, mItemLayoutId, position); } public int getPositon(){ return mPostion; } public interface MultiItemTypeSupport<T> { int getLayoutId(int position , T t); int getViewTypeCount(); int getItemViewType(int postion,T t ); } protected MultiItemTypeSupport<T> mMultiItemSupport; public CommonAapter(Context context,List<T> datas,MultiItemTypeSupport<T> multiItemSupport){ mContext=context; mInflater=LayoutInflater.from(mContext); this.mMultiItemSupport = multiItemSupport; mDatas=datas; } @Override public int getViewTypeCount() { if (mMultiItemSupport != null) return mMultiItemSupport.getViewTypeCount() + 1; return 2; } @Override public int getItemViewType(int position) { if (mMultiItemSupport != null) return mMultiItemSupport.getItemViewType(position, mDatas.get(position)); return position >= mDatas.size() ? 0 : 1; }}
1.2ViewHolder 添加了imageLoader相关方法,使用tag,防止在listview中适用是出现闪烁的情况
public class ViewHolder { private final SparseArray<View> mViews; private int mPostion; private View mConvertView; private int mLayoutId; private ViewHolder(Context context,ViewGroup parent,int layoutId,int position){ mPostion=position; this.mLayoutId=layoutId; mViews=new SparseArray<View>(); mConvertView= LayoutInflater.from(context).inflate(layoutId,parent,false); mConvertView.setTag(this); } public int getLaoutId(){ return mLayoutId; } public View getmConvertView(){ return mConvertView; } public void disPlay(String uri,ImageView imageView,DisplayImageOptions options){ ImageLoader imageLoader=ImageLoader.getInstance(); String uri2= (String) imageView.getTag(); if(uri2==null||!uri.equals(uri2)){ if(options!=null){ imageLoader.displayImage(uri,imageView,options); }else { imageLoader.displayImage(uri,imageView); } imageView.setTag(uri); } } public void disPlay(String uri,RoundImageView imageView,DisplayImageOptions options){ ImageLoader imageLoader=ImageLoader.getInstance(); String uri2= (String) imageView.getTag(); if(uri2==null||!uri.equals(uri2)){ if(options!=null){ imageLoader.displayImage(uri,imageView,options); }else { imageLoader.displayImage(uri,imageView); } imageView.setTag(uri); } } public void addOnClick(View view,View.OnClickListener listener,String url){ String mUrl= (String) view.getTag(); if(mUrl==null||!mUrl.equals(url)){ view.setOnClickListener(listener); view.setTag(url); }else { if(!view.hasOnClickListeners()){ view.setOnClickListener(listener); } } } public static ViewHolder get(Context context,View convertView,ViewGroup parent, int layoutId,int position){ if(convertView==null){ return new ViewHolder(context,parent,layoutId,position); } return (ViewHolder) convertView.getTag(); } 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; } public ViewHolder setText(int viewId,String text){ TextView view=getView(viewId); view.setText(text); return this; } public int getPosition(){ return mPostion; } public ViewHolder setImageResource(int ViewId,int drawableId){ ImageView view=getView(ViewId); view.setImageResource(drawableId); return this; } public ViewHolder setImageBitmap(int viewId,Bitmap bm){ ImageView view=getView(viewId); view.setImageBitmap(bm); return this; } public ViewHolder setTextColor(int viewId,int color){ TextView view=getView(viewId); view.setTextColor(color); return this; } public ViewHolder setHitText(int viewId,String text){ EditText editText=getView(viewId); editText.setHint(text); return this; } public void setRoundImageResource(int img_message_face, int ic_system_message) { ImageView view=getView(img_message_face); view.setImageResource(ic_system_message); } public RoundImageView getRoundImag(int imageView) { return getView(imageView); } public ImageView getImagView(int imageView2) { return getView(imageView2); }}
0 0
- 通用Adapter
- 通用adapter
- 通用Adapter
- android------通用ViewHolder 通用Adapter
- 通用的adapter
- 通用的Adapter
- 通用ListView Adapter
- 通用Adapter与ViewHolder
- 通用Adapter的尝试
- RecyclayerView通用Adapter
- Android 通用Adapter封装
- 打造通用的Adapter
- ListView 通用Adapter封装
- Android通用Adapter整理
- ListView(二)通用的Adapter
- [简单实用系列] 通用adapter
- RecyclerView通用Adapter与ViewHolder
- Android优化之通用Adapter
- Unity3D Assetbundle的原理
- Xcode6的新特性、
- codforeces 527D 贪心
- TiledMap使用笔记
- 让企业零技术门槛做电商
- 通用Adapter
- java web.xml配置servlet
- elasticsearch.yml-elasticsearch配置文件
- sun.misc.BASE64Encoder找不到jar包的解决方法
- Android平台调用Web Service实例解析
- Cocos2d-x 3.x plist+png 做动画
- Dom4j解析xml
- iOS判断字符串中含某一个字符if ([keyName rangeOfString:@"_"].location==NSNotFound) return keyName;
- 利用MyBatis Generator自动创建代码