android-listview
发表于:,更新于:,By Sally
ListView
listview添加了header之后,position错位了
listview添加了header/footer之后,position=0的位置是header,position最大值的位置是footer,但我们想要的不是这样。whats to be done?
listview的
addHeaderView()
方法一定要在setAdapter()
方法之前调用,如果不这样做,addHeaderView
回抛出异常。why?因为, 在
setAdapter
的时候,系统会针对listview是否添加header/footer
这种情况做一些特殊的处理。setAdapter
内部判断当前listview是否有header/footer,如果没有,就直接使用参数传递过来的adapter;如果有,则使用一个decorated的HeaderViewListAdapter
来替换参数。这个HeaderViewListAdapter
的作用,就是排除Header/footer,让position
(包括getItem,getItemId等方法的position)正确返回。 solution?在
OnItemClickListener
中,不要直接使用我们自己声明的adapter,要使用listview的decorated adapter。调用parent.getAdapter()
方法获取。当然,如果listview没有添加header/footer,直接使用我们自己声明的adapter也是ok的。