Android之Adapter系列之Adapter接口

来源:互联网 发布:天网软件股份有限公司 编辑:程序博客网 时间:2024/05/15 04:51

<pre name="code" class="java">Atapter.java是Android适配器最顶级的接口之一。源码路径:framework\base\core\java\android\widget\Adapter.javapackage android.widget;import android.database.DataSetObserver;import android.view.View;import android.view.ViewGroup;/**  * Adapter对象充当View 和该View依赖数据之间的桥梁,  * Adapter提供访问的数据项的方式。同时Adapter还负责  * 为数据集合中的每一项提供一个显示的view  */public interface Adapter {    /**      * 注册数据observer,当数据发生变化后通知adtapter更新      */    void registerDataSetObserver(DataSetObserver observer);    /**      * 和registerDataSetObserver相对应,取消observer注册      */    void unregisterDataSetObserver(DataSetObserver observer);    /**      * adapte使用的数据有多少项.      *       * @return Count of items.      */    int getCount();           /**      * 返回@position位置上的数据      * @param position 需要返回的数据在数据集合中的具体位置      */    Object getItem(int position);        /**      * 返回@position位置上的数据ID      *       * @param position 需要返回的数据ID在数据集合中的具体位置      */    long getItemId(int position);        /**      * 判断关联数据item IDs 是否稳定      * 备注:如果hasStableIds返回false的话 每次调用notifyDataSetChanged      * 方法时 adapter就会判断getItemId 并且在只调用那些Item发生变化的getView方法,      * 即通过getItemId来判断那些需要getView从而达到局部刷新的效果,在getView比较      * 耗时的情况下起到优化的效果。      * @return ture:如果同一个id一直指向同一个对象.      */    boolean hasStableIds();        /**       * 为数据项中的每一项返回一个View。      * 开发者可以手动定义view或者使用xml 定义layout,当View inflated完成,如果开发      * 者不通过android.view.LayoutInflater#inflate(int, android.view.ViewGroup, boolean)      * 来指定一个root view,那么该item view 将被添加系统指定的父控件的root view中       * @param position 数据项中需要获取view item的位置      * @param convertView 旧视图重用。      * 备注: 开发者需要判断该View是否为null并且是否该old的view的type是否和目前请求view的item类型是否相同,如果该      * convertView无法成功转换,那么就需要重新创建一个View.异构列表可以区分view类型的号码,这样,convertView一直是正确的      * 查看#getViewTypeCount() 和#getItemViewType(int).       * @param parent 该item view 将被attach的父控件      */    View getView(int position, View convertView, ViewGroup parent);    /**      * 在getview中被需要被忽视的view类型标记。例如,如果客户端不需要特殊类型      * 的view那么使用该标记,可以将其在gteview中过滤掉      */    static final int IGNORE_ITEM_VIEW_TYPE = AdapterView.ITEM_VIEW_TYPE_IGNORE;        /**      * Get the type of View that will be created by {@link #getView} for the specified item.      * 获将要被创建的view的item类型      * @param position 需要获取item类型在数据集合中的位置      * @return 返回代表 item类型是的 integer。如果两个view中,一个可以被转换成另外一个,那么这两个view的类型相同。      * integer的取值范围为 0 ~ getViewTypeCount - 1,同时IGNORE_ITEM_VIEW_TYPE也可以作为返回值      */    int getItemViewType(int position);        /**      * 返回该adapter要创建的view的类型. 每一种类型代表可以创建的view,      * 如果该adapter中所有items返回同一中类型那么该方法返回值为 1;      *       * @return 返回该adapter要创建的view的类型      */    int getViewTypeCount();        static final int NO_SELECTION = Integer.MIN_VALUE;     /**      * 如果Adapter 中的数据为空,那么返回值为true。该方法用来判断是否要显示空的view。      * 一个典型的实现是通过getCount() == 0来判断view为空,但是getCount()      * 包含了headers和footers,因此通过该方法可以实现当view为空时的一些特殊处理。      */     boolean isEmpty();}


0 0
原创粉丝点击