• Android开发——说说Adapter那点事


    Adapter在Android中占据一个重要的角色,它是数据和UI(View)之间一个重要的纽带。在常见的View(ListView,GridView)等地方都需要用到Adapter。如图1直观的表达了Data、Adapter、View三者的关系。

    未命名

    图1 Adapter、数据、UI三者关系(PS:此图来自Google I/O)

    一、Android中Adapter

    Android-Adapter

    图2:Android中Adapter类型层级图

    由图2我们可以看到在Android中与Adapter有关的所有接口、类的完整层级图。在我们使用过程中可以根据自己的需求实现接口或者继承类进行一定的扩展。比较常用的有 BaseAdapter,ArrayAdapter,SimpleCursorAdapter等。

    • BaseAdapter是一个抽象类,继承它需要实现较多的方法,所以也就具有较高的灵活性;
    • ArrayAdapter支持泛型操作,通常需要实现getView方法,特殊情况下(结合数据row id),为了让ui事件相应处理方便点最好重写getItemId;
    • SimpleCursorAdapter可以适用于简单的纯文字型ListView,它需要Cursor的字段和UI的id对应起来。如需要实现更复杂的UI也可以重写其他方法。

    二、一个继承BaseAdapter的类的代码段

       1: /**
       2:  * 歌曲列表适配器
       3:  * 
       4:  * @version 2010-11-24 下午05:13:33
       5:  * @author Hal
       6:  */
       7: public class AudioListAdapter extends BaseAdapter {
       8:  
       9:     private Context mContext;
      10:  
      11:     // 歌曲集合
      12:     private ArrayList<Audio> mAudios;
      13:  
      14:     public AudioListAdapter(Context mContext, ArrayList<Audio> mAudios) {
      15:         this.mContext = mContext;
      16:         this.mAudios = mAudios;
      17:     }
      18:  
      19:     @Override
      20:     public int getCount() {
      21:         return mAudios != null ? mAudios.size() : 0;
      22:     }
      23:  
      24:     @Override
      25:     public Object getItem(int position) {
      26:         if ((mAudios != null && mAudios.size() > 0) && (position >= 0 && position < mAudios.size())) {
      27:             return mAudios.get(position);
      28:         }
      29:         return null;
      30:     }
      31:  
      32:     /**
      33:      * 如果集合中的对象数据来自数据库,建议此方法返回该对象在数据库中的ID
      34:      */
      35:     @Override
      36:     public long getItemId(int position) {
      37:         if ((mAudios != null && mAudios.size() > 0) && (position >= 0 && position < mAudios.size())) {
      38:             return mAudios.get(position).getId();
      39:         }
      40:         return position;
      41:     }
      42:  
      43:     @Override
      44:     public View getView(int position, View convertView, ViewGroup parent) {
      45:         //TODO 返回自定的View
      46:     }

    欢迎交流讨论:ghanguo@gmail.com

    --------------------EOF---------------------

  • 相关阅读:
    带参数的装饰器
    python清空文件夹
    sqlalchemy的filter使用
    git pull命令的用法
    通过jenkins打包ipa包报错:Command CodeSign failed with a nonzero exit code(errSecInternalComponent)
    postman上传图片,及接口上传图片
    liunx中crontab没有生效
    liunx正则危险符号“*”星号
    rqalpha的改造工作
    Qt浅谈之一:内存泄露(总结)
  • 原文地址:https://www.cnblogs.com/halzhang/p/1890637.html
Copyright © 2020-2023  润新知