Android中ListView使用addHeaderView和addFooterView注意事项

Android中ListView的addHeaderView和addFooterView使用问题

设定ListView的adapter条数为5,即adapter.getCount() = 5

单独使用addHeaderView(View v, Object data, boolean isSelectable)
isSelectable = true时,adapter.getCount()=5,itemClick事件中,点击头部取时position为0,原本不加header时position为0的条目,此时为1,点击最后一条时,position为5,报数组越界错误。即在使用addHeaderView的情况下,所有原有条目的ponsition都加1.
isSelectable = false时,结果与上述结果相同,唯一不同之处在于,点击header时,itemClick事件不会响应。

使用n个addHeaderView(View v, Object data, boolean isSelectable)
adapter.getCount()的结果不变,itemClick事件position的位置改变成position+n,其他与上述相同

单独使用addFooterView(View v, Object data, boolean isSelectable)
isSelectable = true时,adapter.getCount()=5,itemClick事件中,原有数据的点击事件不受影响,点击footer时,position=5,报数组越界错误。
isSelectable = false时,结果与上述结果相同,唯一不同之处在于,点击footer时,itemClick事件不会响应。

使用n个addFooterView(View v, Object data, boolean isSelectable)
点击所有footer都报数组越界错误,其他与上述相同。

解决方法
1、一般header和footer都是跟listview内容有区别的,不使用itemClick事件,而是用onClick作为监听。
2、如果只加了footer,itemClick不用做其他处理,如果加了header则在处理事件中,把position减1.
还有一种方式:

@Override
public void onItemClick(AdapterView<?> parentView, View v, int position, long id) {
           //此时获取的数量是adapter原本的数量加上header和footer的数量
            parentView.getAdapter().getCount();
            parentView.getAdapter().getItem(position);
}

猜你喜欢

转载自blog.csdn.net/lwt675071503/article/details/47834039
今日推荐