android listview和baseadapter
2018-07-20 本文已影响0人
codeflame
getItemId(int position)
对listview展示数据而言,并没有什么用,返回的Id和position有什么关系全凭自己决定。另外在onclick事件中传入的参数id,就是系统通过这个方法获取的,请注意
getItem(int position)
方便自己把对应数据转换成对象,如果adapter中用的是自己的list或array,则不需要从这里获取对象,该情况下也没什么用,随便返回一个值就是
getCount()
和getView(int position, View convertView, ViewGroup parent)
:需要好好重写
对于listview,有个从父类ViewGroup继承下来的View[] mChildren
,于是乎listview(大概)这样初始化:
mChildren =new View[adapter.getCount()];
for(int i=0;i<getCount();i++){
mChildren[i]=adapter.getView(i, mChildren[i], this)
}
大概的重要逻辑上,好像就这么个情况。复用的convertView就是把某个view数组的元素传进去,最后把返回来的值给回数组,从而listview更新数据并不需要重新为子item的view申请内存空间。
注意:实际上并不就是上面这段代码,只是把复用view的方法抽象的说下。实际上还有位置更新后前面的数组位置怎么对应后面position的细节等等。
所以不难理解listview中获取某个正在被显示的item的view时,需要
listview.getChildAt(position - listview.getFirstVisiblePosition())
position是listview算上前面所有行的位置,getFirstVisiblePosition()是listview显示中第一行对应的position,getChildAt()就是返回mChildren数组中的元素。