ListView中的setOnScrollListener监听事件
来源:互联网 发布:c语言打印布尔值 编辑:程序博客网 时间:2024/05/30 18:30
private void init(Context context) { super.setOnScrollListener(new OnScrollListener() { /** *监听着ListView的滑动状态改变。官方的有三种状态SCROLL_STATE_TOUCH_SCROLL、SCROLL_STATE_FLING、SCROLL_STATE_IDLE: * SCROLL_STATE_TOUCH_SCROLL:手指正拖着ListView滑动 * SCROLL_STATE_FLING:ListView正自由滑动 * SCROLL_STATE_IDLE:ListView滑动后静止 * */ @Override public void onScrollStateChanged(AbsListView view, int scrollState) { for(OnScrollListener listener:scrollListeners){ listener.onScrollStateChanged(view,scrollState); } } /** * firstVisibleItem: 表示在屏幕中第一条显示的数据在adapter中的位置 * visibleItemCount:则表示屏幕中最后一条数据在adapter中的数据, * totalItemCount则是在adapter中的总条数 * */ @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { for(OnScrollListener listener : scrollListeners){ listener.onScroll(view,firstVisibleItem,visibleItemCount,totalItemCount); } } });}
2. OnScrollListener中的onScrollStateChanged 和 onScroll() 方法监听回收不到的解决方案
原因:
首先OnScrollListener是焦点滚动的监听事件,需要有焦点才能响应。如果在 ScrollView 中内嵌了 ListView 之后,动态计算了 ListView 的高度,并予以设置高度,那么这时用户拖动界面,造成的滚动是 ScrollView 的滚动,而并非 ListView 的滚动,此时焦点是被 ScrollView 夺去的, ListView 自然就不响应 OnScrollListener的监听咯,同样的在模拟器上使用鼠标滚轮滑动ListView 导致的不响应 OnScrollListener也是如此。
假设和解决办法:
如果此时listView 位于 ScrollView 的最底端,而 ListView 的上方还有一些数据控件需要显示,而 listView 又需要动态设置高度且需要完成分页加载的功能,如图所示,该怎么办呢?
不要紧张,办法是有的,接着往下看吧:
1.刚开始我采用监听 ScrollView 滑动到最底端则加载更多的方式,可是这又导致一个问题,当 ScrollView 内嵌 ListView 时候, ListView 的 notifyDataSetChanged()方法因为需要获取界面资源的原因,在ScrollView 中刷新时会导致主线程的卡顿,具体原因不清楚,估计是调用 notifyDataSetChanged() 方法时,焦点的夺取导致了主线程卡顿,那么这种情况又不行了。
2.接着我想试试能不能自定义 ScrollView 在内嵌 ListView 的时候自动把焦点给 ListView ,可这又牵扯到一个问题, ScrollView 的滑动也是需要焦点的。纠结了一段时间后,我认为此解决方式太过麻烦且不通用,一旦遇到别的情况又要重新自定义控件。So , PASS!
最后我使出杀手锏,采用 ListView + HeadView + footerView 的方式,也就是分成三块,自定义 HeadView 的显示 内容,自定义 footerView 的显示内容,既简单又通用,完全满足了我的需求,但是这里有一个需要注意的,这种转台( ListView 有 HeadView 的情况下)下给 lsitView 设置 OnItemClickListener,那么OnItemClickListener的一个方法:
void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3){
此时的点击position应该是arg3,而不是arg2,因为ListView的 HeadView 会占用一个 item 。
- ListView中的setOnScrollListener监听事件
- listView的setOnScrollListener事件
- listView.setOnScrollListener
- ListView的setOnScrollListener
- ListView的 setOnScrollListener
- 安卓 listView的点击监听和滑动监听 setOnScrollListener setOnTouchListener
- ListView事件监听
- listview的监听事件
- ListView中的Adaper传递监听事件到Actviity(事件监听)
- listview、gridview的setOnScrollListener使用(个人笔记)
- android开发之ListView.setOnScrollListener()略谈
- android listView的setOnScrollListener的使用
- ListView点击事件监听失效
- Listview监听事件的随笔....
- 监听ListView的滚动事件
- listView监听上下滑动事件
- listview点击监听事件失效
- Javascript中的事件监听
- interface / abstract 简单应用
- 阿里云ECS服务器php运行环境配置全过程
- location对象
- 风口的猪-中国牛市--笔试题
- mysql数据库删除(可用于linux)
- ListView中的setOnScrollListener监听事件
- 30OS笔记(3)
- 最小生成树kruskal算法
- Android源码编译(9)---已知问题
- 深入理解分布式事务
- Oracle RMAN 清除归档日志
- 关于sizeof
- 虚拟机+centOS挂载ISO步骤
- mybatis的事物类别