1. Adapter, Android中最常见和明显的设计模式运用,Android中的Adapter主要指的是负责适配AdapterView和Data之间的adapter,可以认为是MVC中的V. Android的Adapter家族还是挺庞大的,base 接口就是Adapter Interface,还和之前一样,一个Interface的源码阅读的价值主要在于基本接口使用guide/抽象设计理念/注释中的要点. Adapter的灵活性极高,很多著名的Android list类开源控件就是在这上面玩花样.

  2. getCount(),没啥多解释的,就是返回Data set中有多少份Item,注意的是,这个函数完全是由调用者自己决定细节的,因此返回多少个Item完全是你说了算的,没必要data set有N个,getCount()就一定老老实实的返回N个(当然了,一般是应该返回N的),一个例子,Adapter的getCount()可以根据不同条件返回不同的count.Adapter的很多个函数都是这样的风格,你的地盘你做主,达到目的即可,切忌僵化.

  3. getItem(int position),返回对应pos的data的Item,返回值是Object,还是之前说的,没有必要Data的类型是int,你就真返回一个int,完全自己说了算,返回null也可接受(取决与调用者的实现)。

  4. getItemId(int position),返回与此pos对应的Item的row Id(row在这里有点误导,像是DB中的row),这里的rowId基本应该和getItem返回的Item是对应的,当然了,随便你乱来(取决与调用者的实现).

  5. hasStableIds(), Item id与Item之间的对应关系是不是一直保持不变,比较冷门的函数.

  6. getView(int position, View convertView, ViewGroup parent),最热门的函数,Adapter的灵活性主要在这里体现,一般来说是返回与position**相关联的**View,不过这里的相关联也是一个相对的概念,一切取决与你,convertView和parent则是完全取决与AdapterView的具体实现,当然了用不用也完全取决于你。

  7. getViewTypeCount()/getItemViewType(int position)这两个Type相关的函数,注释似乎流露出是为convertView服务的感觉,因为View会有很多种,如果涉及到convertView这种重用机制,那么是需要一个Type来做甄别的,不过个人感觉这个也是全凭调用者怎么去用(当然了,anndroid自己的实现肯定是遵循这个的),一个tip是getViewType返回的是一个int,而这个int的有效范围是0到gitViewTypeCount()-1.

  8. isEmpty()返回的是adapter是否对应的sdata是空的,一般用来决定是否显示empty view. 一般s来说等价于getCount() == 0,但是在有header/footView的case下,显然不对。

  9. interface ListAdapter extends Adapter:为ListView定制化的Adapter,只是多了两个方法:

    • areAllItemsEnabled(),List中的View是不是可以被选以及被点击,这个函数的返回值发生变化时,并不会保证这个改动能够生效.
    • isEnabled(int position),pos位置的View是不是一个seperator(指其不能被选,也不能被点击),如果pos是一个无效位置,抛出异常.
  10. interface SpinnerAdapter extends Adapter:为Spinner定制的Adapter,多了一个方法:

    • getDropDownView(int position, View convertView, ViewGroup parent);, getView的细化版.
  11. abstract class BaseAdaspter implements ListAdapter, SpinnerAdapter: 实现了commmon操作的base 抽象类,可以用于ListView,也可以用于Spinner, 实现的主要方法:

    • DataSetObservable mDataSetObservable, 一个Listener模式的简单封装类. registerDataSetObserver()unregisterDataSetObserver()就是相关的register操作函数.
    • notifyDataSetChanged()/notifyDataSetInvalidated()就是对mDataSetObservable相应方法的简单转发.
    • areAllItemsEnabled()/isEnabled(int position)均返回true.不做花样.
    • getItemViewType(int position)直接返回0, getViewTypeCount(),默认只有一种Type
    • isEmpty(),简单的是getCount() == 0.
    • getDropDownView()直接调了getView().
      BaseAdapter已经可以直接extends来使用了,android源码中很多adpater直接衍生自BaseAdapters.
  12. 经常被使用的派生Adapter类大概有这几种:

    • SimpleAdapter extends BaseAdapter implements Filterable:
    • SimpleCursorAdapter<-ResourceCursorAdapter<-CursorAdapter extends BaseAdapter implements Filterable,
      CursorFilter.CursorFilterClient:
    • ArrayAdapter extends BaseAdapter implements Filterable

更多相关文章

  1. 转-Android Studio *.jar 与 *.aar 的生成与*.aar导入项目方法
  2. Android IPC机制(二):AIDL的基本使用方法
  3. 在PC端进行android截屏的多种方法
  4. 在Android上调用OpenCV 2.4.10库函数
  5. Android在线更新SDK的方法(使用国内镜像)
  6. 详解Android应用开发中Intent的作用及使用方法
  7. 使用SourceInsight查看android中的native方法

随机推荐

  1. 关于Android(安卓)emulator的proxy问题
  2. Android(安卓)Studio配置Kotlin开发环境
  3. Android(安卓)使用SimpleAdapter创建图文
  4. Android下PM命令常见使用方法
  5. AndroidKiller高版本反编译失败解决
  6. android emulator snapshot
  7. 《精通Android(安卓)2》书评
  8. Android-Async-Http使用记录
  9. ionic项目中手机状态栏显示使用$cordovaS
  10. Android(安卓)语言切换