ListView addHeaderView 对 position 的影响
1. 在 public View getView(int position, View convertView, ViewGroup parent) 中
position 和 是否有headerView无关,列表item的序号。
2. 在 public void onItemClick(AdapterView<?> parent, View view, int position, long id) 点击事件中
position 是算上了headerView的
要对应上 列表item的序号需要 position-=mListView.getHeaderViewsCount();
3. 比较坑的是 Adapter 的 public Object getItem(int position) 方法。
如果调用了addHeaderView,则用 mListView.getAdapter() 获取的adapter不是开始设置进去的那个adapter。
而是一个HeaderViewListAdapter,对原始Adapter进行了包装。
用这个 mListView.getAdapter().getItem(position); 时,会对position-=headerCound后,再调用原始的Adapter的getItem
4.
mListView.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
Log.e("test", "fv:" + firstVisibleItem + ", vc=" + visibleItemCount + ", cnt=" + totalItemCount);
}
});
firstVisibleItem 是listView中第一个可见item的idx。
当没有headerView和footerView时,这个序号和Adapter里面的position对应。
当有header时,firstPosition = firstVisibleItem - header个数
最后一个可见item的position是:
lastPosition = firstVisibleItem + visibleItemCount - header个数 - 1
注意:firstPosition可能<0, lastPosition可能大于adapter.getCount()注意判断边界。
visibleItemCount 可见子View的个数,这个不是固定值,按实际显示的格式,包括可见的header和footer
totalItemCount adapter中getCount() 个数,加上header,footer的个数
public Object getItem(int position) {
// Header (negative positions will throw an ArrayIndexOutOfBoundsException)
int numHeaders = getHeadersCount();
if (position < numHeaders) {
return mHeaderViewInfos.get(position).data;
}
// Adapter
final int adjPosition = position - numHeaders;
int adapterCount = 0;
if (mAdapter != null) {
adapterCount = mAdapter.getCount();
if (adjPosition < adapterCount) {
return mAdapter.getItem(adjPosition);
}
}
// Footer (off-limits positions will throw an ArrayIndexOutOfBoundsException)
return mFooterViewInfos.get(adjPosition - adapterCount).data;
}
ListView addHeaderView 对 position 的影响的更多相关文章
- Android listview addHeaderView 和 addFooterView 详解
addHeaderView()方法:主要是向listView的头部添加布局addFooterView()方法:主要是向listView的底部添加布局 需要注意的是添加布局的时候应该添加从父容器开始添加 ...
- android listview addHeaderView和addFooterView的注意事项
1. item内如果有button等控件时,在监听listview的onitemclick事件时,焦点会被item内的button. imagebutton等控件抢走,从而导致在listview设置了 ...
- position布局影响点击事件以及冒泡获取事件目标
在编写功能时总是会出现很多意想不到的问题,现在就讲讲我遇到的两个问题,通过举一个相似的例子来解说. <1> 元素互相独立,不存在包含于被包含 选择城市的按钮,为它绑定点击事件,点击后就弹出 ...
- android listview addheaderview viewpager
just set viewPager's onTouchListener,like this: viewPager.setOnTouchListener(new OnTouchListener() { ...
- ListView的addHeaderView()方法相关问题
使用listView.addHeaderView(view) 可以在 listView 上方添加一个view视图 ,使listView和这个view连接在一起 效果上看上去是一个整体 一般用于上拉刷新 ...
- ListView的position的保持
需求场景: 一个ListView页面,滑动阅读到某一位置,然后退出页面,下次再进入页面的时候,想要直接滑动到上次阅读的位置. 方案1: 页面退出的时候,ListView.getFirstVisible ...
- 关于ListView的 addHeaderView(...) 方法
在代码中使用 listView .addHeaderView(...) 方法可以在ListView组件上方添加上其他组件,并且连结在一起像是一个新组件.如果多次使用 .addHeaderView(.. ...
- 问题解决:listview多次调用addHeaderView和addFooterView
情景: 有两个分类,每个分类下的数据用listview显示,分类1需要显示头视图和尾视图,分类2不要显示头视图和尾视图 .两个分类可以来回切换. 实现的步骤: 1. addHeaderView . a ...
- ListView position
在使用listview的时候,我们经常会在listview的监听事件中,例如OnItemClickListener(onItemClick)中,或listview的adapter中(getView.g ...
随机推荐
- 关于zero_interconnect_delay_mode和nonzero_interconnect_delay_mode的区别
在执行report_qor命令时,需要注意这样一个问题,对于Reg_2_Reg路径,在worst scene情况下,nonzero模型要比zero模型报出的结果差,但在best scene情况下,却要 ...
- Python中的可迭代对象与迭代器对象
刚刚学习Python,对“可迭代对象”和"迭代器对象"的个人理解,不知道对不对. 1.几个概念 (1)迭代工具:包括for循环.列表解析.in成员关系测试.....等等在内的,用于 ...
- Html 之菜单导航(二)
网页菜单 网页菜单是一个网页的重要部分,它提供了用户可以对网站所有页面的导航,也是可能是内容的分类,例如淘宝 衣服 鞋子 水果 电脑 等等之类,也可以是 类似于游戏宣传网页一样子,酷炫的js特效 f ...
- 深入理解ecshop2.7.3整合discuzX3.2(97%的完美方案)
转载http://blog.csdn.net/squallleonheart/article/details/39555259 ecshop整合discuzX3.2 ecshop安装包:ECShop_ ...
- Nginx反向代理配置可跨域
由于业务需要,同一项目中的前端代码放在静态环境中,而后端代码放在tomcat中,但此时问题却出现了:前端使用ajax请求后端获取数据时出现如下报错 XMLHttpRequest cannot load ...
- 昨天晚上画了个带apple的图:ide插件与php和xdebug通信原理图,周末写1个调试器。
昨天晚上画了个带apple的图:ide插件与php和xdebug通信原理图,周末写1个调试器.
- android库站点
图片加载库picasso:让本地图片.网络图片的加载变得如此简单. 引导页面的开源框架 guideshow自带小动画,但sdk要求18+ AppIntro界面很简约漂亮 circleindicator ...
- WEP算法的安全性
翻译自http://www.isaac.cs.berkeley.edu/isaac/wep-faq.html WEP算法的安全性 这篇文章讲述了我们对有线等效加密协议(WEP, 802.11标准的一部 ...
- gcc编译的四个阶段:预处理,编译,汇编,链接
1:gcc编译的四个阶段:预处理,编译,汇编,链接 #vi file.c #gcc -E file.c -o file.i//-E查看且预处理后停止编译,-o生成目标文件,-i表示已预处理 #gcc ...
- 对象关联(associated objects)
category与associative作为objective-c的扩展机制的两个特性,category即类型,可以通过它来扩展方法:associative,可以通过它来扩展属性:在iOS开发中,可能 ...