• 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之@property详解及底层实现介绍
    Python触发异常
    一份较认可的文献阅读方案
    HITS算法简介
  • 原文地址:https://www.cnblogs.com/halzhang/p/1890637.html
Copyright © 2020-2023  润新知