您的位置:首页 > 其它

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类中,我们找到了如下方法,

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”代码就可以了。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: