Android中Adapter的一种简介的设计

来源:互联网 发布:windows xp ping不通 编辑:程序博客网 时间:2024/05/29 06:41

//这是自己之前在看一个ImageLoader时候看的一个Adapter的一种简洁的设计

首先是ViewHolder

package holder;import android.content.Context;import android.graphics.Bitmap;import android.graphics.Path;import android.util.SparseArray;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.TextView;import FileUtils.ImageLoader;/** * Created by Administrator on 2017/5/2. */public class ViewHolder {    private final SparseArray<View> mViews;    private int mPosition;    private View mConvertView;    public ViewHolder(Context context, ViewGroup parent, int layoutId,                      int position) {        this.mViews = new SparseArray<View>();        this.mPosition = position;        mConvertView = LayoutInflater.from(context).inflate(layoutId,parent,false);        mConvertView.setTag(this);    }    //获取一个ViewHolder    public static ViewHolder get(Context context, View convertView,                                 ViewGroup parent, int layoutId, int position){        ViewHolder viewHolder = null;        if(convertView==null){            viewHolder= new ViewHolder(context,parent,layoutId,position);        }else{            viewHolder = (ViewHolder) convertView.getTag();            viewHolder.mPosition = position;        }        return  viewHolder ;    }    //获取convertView    public View getConvertView(){        return mConvertView;    }    //通过空间id获取对应空间,如果没有的话就加入控件    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 textView = getView(viewId);        textView.setText(text);        return this;    }    //设置图片    public ViewHolder setImageResource(int viewId,int resource){        ImageView imageView =  getView(viewId);        imageView.setImageResource(resource);        return this;    }    //设置bitmap图片    public ViewHolder setImageBitmap(int viewId, Bitmap bitmap){        ImageView imageView =  getView(viewId);        imageView.setImageBitmap(bitmap);        return this;    }    //通过path设置图片    public ViewHolder setImageByPath(int viewId,String path){        ImageView imageView =  getView(viewId);        ImageLoader.getInstance().loadLocalImage(path,imageView);        return this;    }    //通过网络url设置图片    public ViewHolder setImageByUrl(int viewId,String url){        ImageView imageView =  getView(viewId);        ImageLoader.getInstance().LoadURLImage(url,imageView);        return this;    }    //返回位置    public int getPosition()    {        return mPosition;    }}
//然后是BaseAdapter

package adapter;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import java.util.List;import holder.ViewHolder;/** * Created by Administrator on 2017/5/2. */public abstract class CommonAdapter<T> extends BaseAdapter {    protected LayoutInflater layoutInflater;    protected Context context;    protected List<T> mData;    protected final int mItemLayoutId;    public CommonAdapter(int mItemLayoutId,Context context,List<T> data) {        this.mItemLayoutId = mItemLayoutId;        layoutInflater = LayoutInflater.from(context);        this.context = context;        this.mData = data;    }    @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) {        final ViewHolder viewHolder = getViewHolder(position, convertView,                parent);        convert(viewHolder,  getItem(position));        return viewHolder.getConvertView();    }    public abstract void convert(ViewHolder viewHolder,T item);    private ViewHolder getViewHolder(int position, View convertView, ViewGroup parent)    {        return ViewHolder.get(context, convertView, parent, mItemLayoutId,                position);    }}



0 0
原创粉丝点击