Android之Adapter系列之Adapter接口

<pre name="code" class="java">Atapter.java是Android适配器最顶级的接口之一。

源码路径:framework\base\core\java\android\widget\Adapter.java

package 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();
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值