Android开发中总结的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程序设计有所帮助。

(0)

相关推荐

  • Android中 自定义数据绑定适配器BaseAdapter的方法

    复制代码 代码如下: public class PersonAdapter extends BaseAdapter { private List persons;// 要绑定的数据 private int resource;// 绑定的一个条目界面的id,此例中即为item.xml private LayoutInflater inflater;// 布局填充器,它可以使用一个xml文件生成一个View对象,可以通过Context获取实例对象 public PersonAdapter(Conte

  • android开发中ListView与Adapter使用要点介绍

    1. Adapter.getView() public View getView(int position, View convertView , ViewGroup parent){...} 这个方法就是用来获得指定位置要显示的View.官网解释如下: Get a View that displays the data at the specified position in the data set. You can either create a View manually or infl

  • 详解Android App中ViewPager使用PagerAdapter的方法

    PageAdapter是一个抽象类,直接继承于Object,导入包android.support.v4.view.PagerAdapter即可使用. 要使用PagerAdapter, 首先要继承PagerAdapter类,至少覆盖以下方法: 在每次创建ViewPager或滑动过程中,以下四个方法都会被调用,而instantiateItem和destroyItem中的方法要自己去实现. public abstract int getCount(); 这个方法,是获取当前窗体界面数 public a

  • Android自定义Spinner下拉列表(使用ArrayAdapter和自定义Adapter实现)

    今天学习了Spinner组件的使用,非常好用的一款组件,相当于从下拉列表中选择项目,今天收获颇多,下面给大家演示一下Spinner的使用(分别使用ArrayAdapter和自定义Adapter实现),具体内容如下. (一):使用ArrayAdapter进行适配数据: ①:首先定义一个布局文件: <span style="font-size:16px;"><?xml version="1.0" encoding="utf-8"?&

  • Android listview与adapter详解及实例代码

    一个ListView通常有两个职责. (1)将数据填充到布局. (2)处理用户的选择点击等操作. 第一点很好理解,ListView就是实现这个功能的.第二点也不难做到,在后面的学习中读者会发现,这非常简单. 一个ListView的创建需要3个元素. (1)ListView中的每一列的View. (2)填入View的数据或者图片等. (3)连接数据与ListView的适配器. 也就是说,要使用ListView,首先要了解什么是适配器.适配器是一个连接数据和AdapterView(ListView就

  • Android ListView适配器(Adapter)优化方法详解

    Android ListView的优化,在做Android项目的时候,在用到ListView 界面及数据显示,这个时候如果资源过大,对项目来说,用户体验肯定是不好的,这里就对如何优化做了详细介绍: Adapter的作用就是ListView界面与数据之间的桥梁,当列表里的每一项显示到页面时,都会调用Adapter的getView方法返回一个View.想过没有? 在我们的列表有1000000项时会是什么样的?是不是会占用极大的系统资源? ListView的Adapter的作用如下图所示: 先看看下面

  • Android中的Adapter简单介绍

    Android中的Adapter在自定义显示列表时非常有用,比如SimpleAdapter,它的构造函数是: public SimpleAdapter (Context context, List> data, int resource, String[] from, int[] to) 它的各参数的意思: 1.context,上下文,SimpleAdapter关联的视图,一般而言就是当前的Activity,this 2.data,泛型的List,如ArrayList,Map或者HashMap

  • Android中GridView和ArrayAdapter用法实例分析

    本文实例分析了Android中GridView和ArrayAdapter用法.分享给大家供大家参考,具体如下: GridView是一个表格化的二维排版的View,当GridView的文字放不下时会出现scrolling的效果,GridView中的元素命名为Item,要将Item放入GridView,需要ArrayAdapter对象. 例子如下: import android.app.Activity; import android.os.Bundle; import android.view.V

  • Android Adapter的几个常用方法

    Android Adapter的几个常用方法分享给大家,具体内容如下 1  ListView是在什么时候设置对Adapter的数据监听的? 在setAdapter(ListAdapter adapter)中,会先取消ListView中原来的mAdapter中的数据监听(mAdapter.unregisterDataSetObserver(mDataSetObserver);),然后再设置对新设置的adapter的数据监听. 2  getView(int position, View conver

  • Android开发中ListView自定义adapter的封装

    [引入] 我们一般编写listView的时候顺序是这样的:  •需要展示的数据集List<T>  •为这个数据集编写一个ListView  •为这个ListView编写一个Adapter,一般继承自BaseAdapter  •在BaseAdapter内部编写一个ViewHolder类,对应ListView里面的item控件,提高控件的查询效率 分析: List<T>:ListView --> Adapter extends BaseAdapter --> ViewHol

  • Kotlin编写Android适配器Adapter

    说好今天要写一个使用Kotlin写Adapter的列子,我想了半天也没有组织好语言,直接上代码吧,有一定Android基础的小伙伴肯定是能看的懂的 package com.example.administrator.kotlintest import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import and

随机推荐