官方网址:http://developer.android.com/reference/android/widget/Adapter.html
声明源码:frameworks\base\core\java\android\widget\Adapter.java

//frameworks\base\core\java\android\widget\Adapter.java/*** Adapter对象作为AdapterView视图与底层数据之间的桥梁;* Adapter提供了对数据项的访问;也负责为数据集的每个数据项产生一个对应的View。*/public interface Adapter {    /**     * 注册一个Observer,当Adapter所使用的发送改变时,它会被调用到。       * DataSetObserver是个抽象类,有onChanged和onInvalidated两个方法。     */    void registerDataSetObserver(DataSetObserver observer);    /**     * 注销使用上述接口注册的Observer      */    void unregisterDataSetObserver(DataSetObserver observer);    /**     * 获取该Adapter所代表的数据集中数据项的数量     */    int getCount();           /**     * 获取数据集中指定位置的数据项     */    Object getItem(int position);        /**     * 获取指定位置的数据项的ID     */    long getItemId(int position);        /**     * 判断数据项的ID是否是稳定的,也就是不会随着底层数据的改变而改变     * 如果同样的对象返回同样的ID,则返回true     */    boolean hasStableIds();        /**     * 获取一个显示数据集中指定位置的数据的View;你可以手动创建一个View或者由XML布局文件中生成;     * 当View生成时,其父View(GridView, ListView...) 将使用默认的布局参数,除非你用如下的函数     * android.view.LayoutInflater#inflate(int, android.view.ViewGroup, boolean)     * 指定一个根View,并且避免它附加到这个根View上。.     *      * @param position 数据项在数据集中的位置     * @param convertView 可以复用的旧View;注意:使用前,你要检查它非空,并且类型也合适;     *        如果它不能转换成显示正确数据的View,这个方法能创建一个新的View;     // 为了避免产生大量的View浪费内存,在Android中,AdapterView中的View是可回收的使用的。      // 比如你有100项数据要显示,而你的屏幕一次只能显示10条数据,则只产生10个View,        // 当往下拖动要显示第11个View时,会把第1个View的引用传递过去,更新里面的数据再显示,     // 也就是说View可重用,只是更新视图中的数据用于显示新的一项,     // 如果一个视图的视图类型是IGNORE_ITEM_VIEW_TYPE的话,则此视图不会被重用       *        Heterogeneous列表能指定它们的所有View类型,因此,View的类型总是对的。     * @param parent 这个View最终被添加到其上的父控件。     * @return 与指定位置的数据,对应的View。     */    View getView(int position, View convertView, ViewGroup parent);    /**     * 可以导致AdapterView忽略数据项View的类型;     * 比如,如果客户端不想要一个为getView(int, View, ViewGroup)转换的特殊的View时,就可以用这个。     */    static final int IGNORE_ITEM_VIEW_TYPE = AdapterView.ITEM_VIEW_TYPE_IGNORE;        // 获得相应位置的这图类型       /**     * 获取将要通过getView,为指定数据项创建的的View的类型     * @return 整数代表View的类型;在getView中的两种View可以相互转换的话,应该共享同一种类型;     *         注意:整数必须在0到getViewTypeCount-1之间,也可以返回IGNORE_ITEM_VIEW_TYPE。     * @see #IGNORE_ITEM_VIEW_TYPE     */    int getItemViewType(int position);        /**     * 返回通过getView创建的View类型的数量,每种类型代表在getView中可以相互转换的一组View;     * 如果适配器为所有数据项,总是返回同样的类型,该方法应该返回1.     * 这个方法仅当适配器设置给AdapterView时,才被调用到;     */    int getViewTypeCount();        static final int NO_SELECTION = Integer.MIN_VALUE;     /**      * 如果该适配器不包含任何数据,则返回true;它用来决定是否显示空View;      * 一个典型的实现是返回getCount() == 0,但是当getCount()包含header和footers时,      * 特殊的适配器,应该是想要实现一个不一样的行为。      */     boolean isEmpty();} //frameworks\base\core\java\android\widget\BaseAdapter.java/*** 它是一个基类,是对Adapter接口的一般实现;* 即可用于ListView(实现了指定的ListAdapter接口),也可用于Spinner(实现了SpinnerAdapter接口);*/public abstract class BaseAdapter implements ListAdapter, SpinnerAdapter {    private final DataSetObservable mDataSetObservable = new DataSetObservable();    public boolean hasStableIds() {        return false;    }        public void registerDataSetObserver(DataSetObserver observer) {        mDataSetObservable.registerObserver(observer);    }    public void unregisterDataSetObserver(DataSetObserver observer) {        mDataSetObservable.unregisterObserver(observer);    }        /**     * 通知附加的观察者,底层数据已经改变,任何与数据集相关联的View都应该重绘。     */    public void notifyDataSetChanged() {        mDataSetObservable.notifyChanged();    }    /**     * 通知附件的观察者,底层数据已经无效或不可用;当适配器无效并不应该再报数据集变化时触发。     */    public void notifyDataSetInvalidated() {        mDataSetObservable.notifyInvalidated();    }    public boolean areAllItemsEnabled() {        return true; //都有效,无分隔项    }    public boolean isEnabled(int position) {        return true; //都有效    }    public View getDropDownView(int position, View convertView, ViewGroup parent) {        return getView(position, convertView, parent);    }    public int getItemViewType(int position) {        return 0; //数据项的类型都是0,都相同    }    public int getViewTypeCount() {        return 1; //数据项的类型数为0,都相同    }        public boolean isEmpty() {        return getCount() == 0; //项数为0即是空    }}



更多相关文章

  1. Android 数据库Sqlite的使用(1)
  2. android Service之四:传递复杂数据类型的远程服务
  3. 传智播客—Android(二)数据存储和访问 之文件
  4. Android保存数据几种常用方法解析
  5. Android数据储存
  6. 王家林的81门一站式云计算分布式大数据&移动互联网解决方案课程
  7. Android 封装的数据库管理操作类
  8. Android Sqlite轻量级数据库框架

随机推荐

  1. Android(安卓)- 运行时权限一个工具类搞
  2. Android(安卓)URLconnection
  3. Android第三十八期 - 评价标签FlowLayout
  4. Android(安卓)异常- java.lang.SecurityE
  5. android 图片处理
  6. Android(安卓)toast弹出时间自定义
  7. Android(安卓)WebView清空缓存
  8. Android: 利用Bimap,canvas处理图片(画直
  9. android 使用include 调用内部组件
  10. Android读取Txt文件