<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();
}
Android之Adapter系列之Adapter接口
最新推荐文章于 2022-08-22 08:44:24 发布