android-listview

发表于:,更新于:,By Sally
大纲
  1. 1. ListView
    1. 1.1. listview添加了header之后,position错位了

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