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的。