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 ...
随机推荐
- centos单用户模式修改ROOT密码
首先启动的时候的时候,需要进入单用户模式(进入单用户模式的前提是系统引导器能正常工作),单用户模式是不需要输入密码,并且(进入单用户模式,没有开启网络服务,不支持远程连接 )网上说可以通过GRUB ( ...
- BeautifulSoup-find,findAll
BeautifulSoup的主要函数使用 from bs4 import BeautifulSouphtml = """<html><head>& ...
- Error: unable to connect to node rabbit@mail: nodedown
某天,开启一个应用时,发现连接rabbitmq失败,本来想用rabbitmqctl来查看队列,结果提示“Error: unable to connect to node rabbit@mail: no ...
- redis 数据结构一 之t_string
简介 REDIS有非常丰富的数据结构 以及建立在这数据结构上的操作,在源文件中主要集中在 T_hash.c /T_list.c /T_string.c/T_zset.c 可以说读懂了这4个源文件 大 ...
- linux精确查找命令
1. find命令 命令 功能:搜寻文件与目录 功能: 语法: 语法:find 目录名 选项 常用选项有: 常用选项有: -name filename按名字查找 按名字查找 -type x 查找类型为 ...
- iOS中的extern与static
1.extern #import <Foundation/Foundation.h> extern NSString *DBDefaultName; @interface DataBase ...
- javascript在html中的加载顺序
参考:[1]http://coolshell.cn/articles/9749.html(酷壳) [2]http://shaozhuqing.com/?p=2756 [3]http://www.cnb ...
- iconv 失败
网上的都是这样用的 代码如下: $content = iconv("utf-8","gb2312",$content); 这样做其实也 ...
- php + sqlserver
Dbconn <?php class DbConn{ private $conn; private $rs; private function __construct(){ $serverNam ...
- MatLab/HR
等