ListView通用适配器

来源:互联网 发布:淘宝格子铺能卖出去么 编辑:程序博客网 时间:2024/05/20 20:55

1.通用适配器CommonAdapter.java,代码如下:

package com.gucc.contacts.widget;import java.util.List;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;/** *  * @author: guc * @create_time:2017年5月9日  下午3:38:48 * @类描述:通用Adapter * @version: * */public abstract class CommonAdapter<T> extends BaseAdapter  {      protected LayoutInflater mInflater;      protected Context mContext;      protected List<T> mDatas;      protected final int mItemLayoutId;     public CommonAdapter(Context context, List<T> mDatas,int itemLayoutId)      {          mInflater = LayoutInflater.from(context);          this.mContext = context;          this.mDatas = mDatas;         this.mItemLayoutId = itemLayoutId;    }      @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)      {          final ViewHolder viewHolder = getViewHolder(position, convertView,                  parent);          convert(viewHolder, getItem(position),position);          return viewHolder.getConvertView();      }      public abstract void convert(ViewHolder helper, T item,int position);     private ViewHolder getViewHolder(int position, View convertView,              ViewGroup parent)      {          return ViewHolder.get(mContext, convertView, parent, mItemLayoutId,                  position);      }  }  

2.通用ViewHolder.java

package com.gucc.contacts.widget;import android.content.Context;import android.graphics.Bitmap;import android.util.SparseArray;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.TextView;/** *  * @author: guc * @create_time:2017年5月9日 下午3:31:31 * @类描述:通用的ViewHolder类 * @version: *  */public class ViewHolder {    private final SparseArray<View> mViews;    private View mConvertView;    private int mPosition;    private ViewHolder(Context context, ViewGroup parent, int layoutId,            int position) {        this.mPosition = position;        this.mViews = new SparseArray<View>();        mConvertView = LayoutInflater.from(context).inflate(layoutId, parent,                false);        // setTag        mConvertView.setTag(this);    }    /**     * 拿到一个ViewHolder对象     *      * @param context     * @param convertView     * @param parent     * @param layoutId     * @param position     * @return     */    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();    }    /**     * 通过控件的Id获取对于的控件,如果没有则加入views     *      * @param viewId     * @return     */    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 View getConvertView() {        return mConvertView;    }    /**      * 为TextView设置字符串      *       * @param viewId      * @param text      * @return      */      public ViewHolder setText(int viewId, String text)      {          TextView view = getView(viewId);          view.setText(text);          return this;      }      /**      * 为ImageView设置图片      *       * @param viewId      * @param drawableId      * @return      */      public ViewHolder setImageResource(int viewId, int drawableId)      {          ImageView view = getView(viewId);          view.setImageResource(drawableId);          return this;      }      /**      * 为ImageView设置图片      *       * @param viewId      * @param drawableId      * @return      */      public ViewHolder setImageBitmap(int viewId, Bitmap bm)      {          ImageView view = getView(viewId);          view.setImageBitmap(bm);          return this;      }      /**      * 为ImageView设置图片 加载网络图片     *       * @param viewId      * @param drawableId      * @return      */      public ViewHolder setImageByUrl(int viewId, String url)      {          Picasso.with(getContext())                        .load(url)                        .placeholder(                                new ColorDrawable(Color.parseColor("#f5f5f5")))                        .into((ImageView )getView(viewId));        return this;      }      public int getPosition()      {          return mPosition;      }      /**     * 显示或隐藏控件     * @param viewId     * @param visibility     */    public void setVisibility(int viewId, int visibility){        View view = getView(viewId);        view.setVisibility(visibility);    }}

3.1使用可在java代码中直接使用

//获取到Adapter对象,对ListView.setAdapter(mAdapter);即可mAdapter = new CommonAdapter<String>(getApplicationContext(),                  R.layout.item_single_str, mDatas)          {              @Override              protected void convert(ViewHolder viewHolder, String item)              {                  viewHolder.setText(R.id.id_tv_title, item);              }          };  

3.2创建UserAdapter继承CommonAdapter:

package com.gucc.contacts;import android.content.Context;import android.view.View;import java.util.List;import com.gucc.contacts.User;import com.gucc.contacts.widget.CommonAdapter;import com.gucc.contacts.widget.ViewHolder;/** *  * @author: guc * @create_time:2017年5月8日 上午9:58:48 * mAdapter = new UserAdapter<>(this, mDatas, R.layout.item); * mListview.setAdapter(mAdapter); */public class UserAdapter<T> extends CommonAdapter<T> {    private List<User> users;    private User user;    @SuppressWarnings("unchecked")    public UserAdapter(Context context, List<T> mDatas,int itemLayoutId) {        super(context, mDatas,itemLayoutId);        this.mContext = context;        this.users = (List<User>) mDatas;    }    @Override    public void convert(ViewHolder helper, T item,int position) {        user = (User) item;        helper.setText(R.id.name, user.getName());    }}

4.参考:打造万能的ListView GridView 适配器
优化:ViewHolder类中增加了setVisibility(int viewId, int visibility)方法用来设置控件的显示情况。
修改:ViewHolder类中setImageByUrl(int viewId, String url)方法改为用Picasso来加载网络图片。Picasso.jar下载

0 0
原创粉丝点击