• 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---------------------

  • 相关阅读:
    【面试题】java基础(一)
    【java集合总结】-- ArrayList源码解析
    【java集合总结】-- 数组总结+自己封装数组类
    【MySQL高可用架构设计】(一)-- mysql复制功能介绍
    【Linux】-- 认识bash shell
    【ORM框架】Spring Data JPA(一)-- 入门
    【数据结构】-- 理解哈希表
    【spring】-- springboot配置全局异常处理器
    【spring】-- jsr303参数校验器
    【web安全】-- springboot实现两次MD5加密
  • 原文地址:https://www.cnblogs.com/halzhang/p/1890637.html
Copyright © 2020-2023  润新知