欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android开发中总结的Adapter工具类【附完整源码下载】

程序员文章站 2023-11-06 22:14:58
本文实例讲述了android开发中总结的adapter工具类。分享给大家供大家参考,具体如下: adapter是连接后端数据和前端显示的适配器接口,是数据和ui(view...

本文实例讲述了android开发中总结的adapter工具类。分享给大家供大家参考,具体如下:

adapter是连接后端数据和前端显示的适配器接口,是数据和ui(view)之间一个重要的纽带。在常见的view(listview,gridview)等地方都需要用到adapter。

每个开发工程师都会有自己的一些常用到的工具类,今天我分享一下我自己总结的关于adapter的工具类,话不多说直接上代码

commonadapter:

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)
  {
    this.mcontext = context;
    this.minflater = layoutinflater.from(mcontext);
    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 postion);
  private viewholder getviewholder(int position, view convertview,
      viewgroup parent)
  {
    return viewholder.get(mcontext, convertview, parent, mitemlayoutid,
        position);
  }
}

viewholder:

public class viewholder
{
  private final sparsearray<view> mviews;
  private int mposition;
  private view mconvertview;
  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)
  {
    viewholder holder = null;
    if (convertview == null)
    {
      holder = new viewholder(context, parent, layoutid, position);
    } else
    {
      holder = (viewholder) convertview.gettag();
      holder.mposition = position;
    }
    return holder;
  }
  public view getconvertview()
  {
    return mconvertview;
  }
  /**
   * 通过控件的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;
  }
  /**
   * 为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)
  {
    imageloader.getinstance(3,type.lifo).loadimage(url, (imageview) getview(viewid));
    return this;
  }
  public int getposition()
  {
    return mposition;
  }
}

myadapter:

public class myadapter extends commonadapter<string>
{
  private list<string> mdata ;
  public myadapter(context context, list<string> mdatas, int itemlayoutid)
  {
    super(context, mdatas, itemlayoutid);
    this.mdatas = mdatas ;
  }
  @override
  public void convert(final viewholder helper, final string item , int postion)
  {
    /**
     * 第一种
     */
    helper.setimageresource(r.id.item_ib01, r.drawable.ic_launcher);
    helper.setimageresource(r.id.item_iv01,
        r.drawable.ic_launcher);
    helper.settext(r.id.item_tv01, "我是第"+mdatas.get(postion)+"个") ;
    // 通过路径设置图片
//   helper.setimagebyurl(r.id.id_item_image, mdirpath + "/" + item);
  /*
   * 第二种
   */
    /*
     *
    final imageview item_iv = helper.getview(r.id.item_iv01);
    final imagebutton item_ib = helper.getview(r.id.item_ib01);
    textview item_tv = helper.getview(r.id.item_tv01) ;
    item_tv.settext("我是第"+mdatas.get(postion)+"个") ;
    item_iv.setimageresource(r.drawable.ic_launcher);
    item_ib.setcolorfilter(color.parsecolor("#77000000"));
     */
  }
}

附:完整实例代码点击此处本站下载

ps:该下载源码包含了eclipse与studio两个压缩包。

更多关于android相关内容感兴趣的读者可查看本站专题:《android开发入门与进阶教程》、《android布局layout技巧总结》、《android视图view技巧总结》、《android编程之activity操作技巧总结》、《android操作json格式数据技巧总结》、《android资源操作技巧汇总》及《android控件用法总结

希望本文所述对大家android程序设计有所帮助。