关于ListView加入HeaderView之后,点击条目时获得position参数移位的BUG修正

        今天遇到一个问题,在ListView的时候,要在首部加一个轮播图组件,调用的是ListView的addHeaderView(View v, Object data, boolean isSelectable)方法,这个方法可以把一个view放置到Listview的顶部显示,也可以多次调用,使得多个view按照添加的顺序,依次排列在ListView的顶部显示。

        

        这样做了之后是显示是没问题的,但是遇到一个问题就是在ListView的Adapter的构造方法中,要添加ListView的条目点击事件:mListView.setOnItemClickListener(this); 

        然后在Adapter里面实现onItemClick(AdapterView<?> parent, View view, int position,long id)方法,在通过position取数据的时候发现一个问题,就是点击的条目错位了,点击一个条目,结果响应事件变成了下一个条目对应的事件。


        经过探查之后发现,本来ListView条目的position是从0开始计算的:0,1,2...这样,但是添加了一个Header之后,position变成了从1开始,于是需要手动修正一下这个postion的值。

        好在Android中有提供一个对应的API来得到HeaderView的数量,那就是ListView中的一个方法:getHeaderViewsCount(),这个方法可以得到这个ListView添加了多少个HeaderView,然后我们需要做的只是在使用position之前,修正一下:


// TODO 修正有Header的ListView的position的BUG
int headerViewsCount = listView.getHeaderViewsCount();//得到header的总数量
			
//得到新的修正后的position
int newPosition = position - headerViewsCount;



ok,问题解决。


你可能感兴趣的:(ListView,header,addHeaderView,移位)