热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

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

这篇文章主要介绍了Android开发中总结的Adapter工具类,简单说明了Adapter的功能,并结合实例形式分析了Adapter工具类的相关使用方法,并附带完整源码供读者下载参考,需要的朋友可以参考下

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

Adapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带。在常见的View(ListView,GridView)等地方都需要用到Adapter。

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

CommonAdapter:

public abstract class CommonAdapter extends BaseAdapter
{
  protected LayoutInflater mInflater;
  protected Context mContext;
  protected List mDatas;
  protected final int mItemLayoutId;
  public CommonAdapter(Context context, List 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 mViews;
  private int mPosition;
  private View mConvertView;
  private ViewHolder(Context context, ViewGroup parent, int layoutId,
      int position)
  {
    this.mPosition = position;
    this.mViews = new SparseArray();
    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 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
{
  private List mData ;
  public MyAdapter(Context context, List 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程序设计有所帮助。


推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
  • 在Android中解析Gson解析json数据是很方便快捷的,可以直接将json数据解析成java对象或者集合。使用Gson解析json成对象时,默认将json里对应字段的值解析到java对象里对应字段的属性里面。然而,当我们自己定义的java对象里的属性名与json里的字段名不一样时,我们可以使用@SerializedName注解来将对象里的属性跟json里字段对应值匹配起来。本文介绍了使用@SerializedName注解解析json数据的方法,并给出了具体的使用示例。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 本文介绍了在Ubuntu 11.10 x64环境下安装Android开发环境的步骤,并提供了解决常见问题的方法。其中包括安装Eclipse的ADT插件、解决缺少GEF插件的问题以及解决无法找到'userdata.img'文件的问题。此外,还提供了相关插件和系统镜像的下载链接。 ... [详细]
  • 本文介绍了常用的编辑器快捷键,包括快速转换编辑器、浏览选项卡、提取本地变量和方法、编辑器窗口最大化等功能。通过使用这些快捷键,可以提高编辑器的使用效率,减少复杂度,并提升代码的可测试性。 ... [详细]
  • 【具体报错信息】ErrorparsingD:\android-sdks\system-images\android-22\android-wear\armeabi-v7a\devi ... [详细]
  • Allegro总结:1.防焊层(SolderMask):又称绿油层,PCB非布线层,用于制成丝网印板,将不需要焊接的地方涂上防焊剂.在防焊层上预留的焊盘大小要比实际的焊盘大一些,其差值一般 ... [详细]
  • android ... [详细]
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
author-avatar
美竹
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有