通用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
原创粉丝点击