BaseAdapter
2016-01-01 22:54
274 查看
BaseAdapter就Android应用程序中经常用到的基础数据适配器,它的主要用途是将一组数据传到像ListView、Spinner、Gallery及GridView等UI显示组件,它是继承自接口类Adapter。
拿listView为例,当系统开始绘制ListView的时候,首先会调用getCount()方法,得到它的返回值就是ListVew的长度,然后系统调用getView()方法,根据这个长度逐一绘制ListView的每一行。而getItem()和getItemId()则需要在获取和处理Adapter里面的数据的时候调用。
getItem():
官方解释是Get the data item associated with the specified position in the data set.即获得相应数据集合中特定位置的数据项。那么该方法是在哪里被调用呢?什么时候被调用呢?
通过查看源代码发现,getItem方法不是在Baseadapter类中被调用的,而是在Adapterview中被调用的。
adapterView类中,我们找到了如下方法,
那么getItemAtPosition(position) 又是什么时候被调用?答案:它也不会被自动调用,它是用来在我们设置
setOnItemClickListener、setOnItemLongClickListener、setOnItemSelectedListener的点击选择处理事件中方便地调用
来获取当前行数据的。官方解释Impelmenters can call getItemAtPosition(position) if they need to access the data
associated with the selected item.所以一般情况下,我们可以这样写:
@Override
public Object getItem(int position) {
return this.datalist.get(position);
}
当然如果你喜欢,也可以在里面直接返回null.
至于getItemId(int position),它返回的是该postion对应item的id,adapterview也有类似方法:
不同getItem的是,某些方法(如onclicklistener的onclick方法)有id这个参数,而这个id参数就是取决于getItemId()这个返回值的。
我们一般可以这样实现:
拿listView为例,当系统开始绘制ListView的时候,首先会调用getCount()方法,得到它的返回值就是ListVew的长度,然后系统调用getView()方法,根据这个长度逐一绘制ListView的每一行。而getItem()和getItemId()则需要在获取和处理Adapter里面的数据的时候调用。
getItem():
官方解释是Get the data item associated with the specified position in the data set.即获得相应数据集合中特定位置的数据项。那么该方法是在哪里被调用呢?什么时候被调用呢?
通过查看源代码发现,getItem方法不是在Baseadapter类中被调用的,而是在Adapterview中被调用的。
adapterView类中,我们找到了如下方法,
public Object getItemAtPosition(int position) {T adapter = getAdapter();return (adapter == null || position < 0) ? null : adapter.getItem(position);}
那么getItemAtPosition(position) 又是什么时候被调用?答案:它也不会被自动调用,它是用来在我们设置
setOnItemClickListener、setOnItemLongClickListener、setOnItemSelectedListener的点击选择处理事件中方便地调用
来获取当前行数据的。官方解释Impelmenters can call getItemAtPosition(position) if they need to access the data
associated with the selected item.所以一般情况下,我们可以这样写:
@Override
public Object getItem(int position) {
return this.datalist.get(position);
}
当然如果你喜欢,也可以在里面直接返回null.
至于getItemId(int position),它返回的是该postion对应item的id,adapterview也有类似方法:
public long getItemIdAtPosition(int position) {T adapter = getAdapter();return (adapter == null || position < 0) ? INVALID_ROW_ID : adapter.getItemId(position);}
不同getItem的是,某些方法(如onclicklistener的onclick方法)有id这个参数,而这个id参数就是取决于getItemId()这个返回值的。
我们一般可以这样实现:
@Overridepublic long getItemId(int position) {return position;}
若是在ListView的item里面放入Button会抢夺ListView的焦点,需要将Button设置为没有焦点。设置非常简单,只需要在xml的Button标签下加入一行android:focusable=“false”代码就可以了。
相关文章推荐
- CALayer - 6
- Ubuntu上hi3531交叉编译环境arm-hisiv100nptl-linux搭建过程
- 笔记:《高效能人士的七个习惯》第二章 七个习惯概论
- 在JS中整段地写HTML
- Android数据库升级最佳方案
- Keil调试局部变量显示"not in scope"的问题解决
- xendesktop7.6更新虚拟桌面镜像测试小结
- [译]GC专家系列1: 理解Java垃圾回收
- app如何添加引导页。
- 网站前端的经验
- 一起来学node.js吧 node school简介
- 使用lhgDialog进行值的传入与传出
- C语言指针-----指针与函数
- HttpClient和HttpURLConnection整合汇总对比
- iOS扫描二维码
- Swift 2.x Plus
- weakRefrence 到Invocation(一)
- 生命里的每一个梦
- windows(win8)和linux(CentOS6)上的telnet的开启和使用
- 使用Detect It Easy查看软件是使用什么工具编写的