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

 更新时间:2017年11月23日 11:34:46   作者:紫寒天  
这篇文章主要介绍了Android开发中总结的Adapter工具类,简单说明了Adapter的功能,并结合实例形式分析了Adapter工具类的相关使用方法,并附带完整源码供读者下载参考,需要的朋友可以参考下

本文实例讲述了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程序设计有所帮助。

相关文章

  • Android中RecyclerView实现分页滚动的方法详解

    Android中RecyclerView实现分页滚动的方法详解

    RecyclerView实现滚动相信对大家来说都不陌生,但是本文主要给大家介绍了利用Android中RecyclerView实现分页滚动的思路和方法,可以实现翻页功能,一次翻一页,也可以实现翻至某一页功能。文中给出了详细的示例代码,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-04-04
  • Android实现环形进度条

    Android实现环形进度条

    这篇文章主要为大家详细介绍了Android实现环形进度条,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • Android ListView异步加载图片方法详解

    Android ListView异步加载图片方法详解

    这篇文章主要介绍了Android ListView异步加载图片方法,结合实例形式较为详细的分析了ListView异步加载图片的原理与相关实现技巧,需要的朋友可以参考下
    2016-02-02
  • Android自动化获取卡顿信息的实现方法

    Android自动化获取卡顿信息的实现方法

    自动化获取卡顿信息就像给App装  “行车记录仪”  —— 实时记录主线程的“驾驶状态”,一旦发现“急刹车”(卡顿),立刻保存现场(堆栈),事后回看录像(日志)精准定位问题,本文给大家介绍了Android自动化获取卡顿信息的实现方法,需要的朋友可以参考下
    2025-02-02
  • Android UI绘制流程及原理详解

    Android UI绘制流程及原理详解

    在本篇文章里小编给大家整理的是关于Android UI绘制流程及原理以及相关知识点,需要的朋友们可以学习下。
    2019-08-08
  • 代码实例分析android中inline hook

    代码实例分析android中inline hook

    本片文章主要给大家通过代码示例分析了android中inline hook的用法是实现过程,需要的朋友跟着参考下吧。
    2018-01-01
  • 详解android 中animation-list 动画的应用

    详解android 中animation-list 动画的应用

    本篇文章主要介绍了详解android 中animation-list 动画的应用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • Android中的SQL查询语句LIKE绑定参数问题解决办法(sqlite数据库)

    Android中的SQL查询语句LIKE绑定参数问题解决办法(sqlite数据库)

    这篇文章主要介绍了Android中的SQL查询语句LIKE绑定参数问题解决办法,本文使用的是sqlite数据库,需要的朋友可以参考下
    2014-06-06
  • Android使用ImageView 制作透明圆弧实例代码

    Android使用ImageView 制作透明圆弧实例代码

    这篇文章主要介绍了Android使用ImageView 制作透明圆弧实例代码的相关资料,需要的朋友可以参考下
    2016-05-05
  • Android获取所在时区时间的两种方式

    Android获取所在时区时间的两种方式

    Android获取所在时区正确时间的方式有两种,通过wifi获取时间和通过通过GPS获取时间这两种方式,文中通过代码示例给大家的介绍的非常详细,需要的朋友可以参考下
    2024-04-04

最新评论