关于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之前,修正一下:


于是我在重写Adapter的getItem方法时加入如下代码:


[java]  view plain  copy
  1. // TODO 修正有Header的ListView的position的BUG  
  2. int headerViewsCount = listView.getHeaderViewsCount();//得到header的总数量  
  3.               
  4. //得到新的修正后的position  
  5. int newPosition = position - headerViewsCount;  



ok,问题解决。



事实往往不是自己想的那样,程序崩溃了。。。



再去找原因,终于发现最终的解决方案了。实际发现不管listview有没有headview,对于adapter并不知道,所以adapter的position按照正常顺序。所以

大家应该知道该怎么改了吧?需要在listview的onitemclicklistener中修正postion,然后调用adapter的getItem方法即可:




ok,问题最终解决了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值