android -- 小问题 关于ListView设置了OnScrollListener之后onScrollStateChanged()和onScroll方法监听不到的问题
关于ListView设置了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的一个方法:
public void onItemClick(AdapterView<?
> arg0, View arg1, int arg2,long arg3){
}
此时的点击position应该是arg3,而不是arg2,由于ListView的HeadView会占用一个item。
android -- 小问题 关于ListView设置了OnScrollListener之后onScrollStateChanged()和onScroll方法监听不到的问题的更多相关文章
- Android四大组件之Activity一(组件的概念、Intent、监听)
前言知识补充: 什么是组件? 1.它的类必须实现特定接口或继承特定类 2.需要在配置文件中配置其全类名 3.它的对象不是通过new来创建的, 而是系统自动创建的 4.它的对象具有一定 ...
- Android实战简易教程-第四十枪(窃听风云之短信监听)
近期在做监听验证码短信自己主动填入的功能,无意间想到了一个短信监听的办法. 免责声明:短信监听本身是一种违法行为,这里仅仅是技术描写叙述.请大家学习技术就可以.(哈哈) 本实例是基于bmob提供的后台 ...
- Android开发 ---基本UI组件7 :分页功能、适配器、滚动条监听事件
效果图: 1.activity_main.xml 描述: 定义了一个按钮 <?xml version="1.0" encoding="utf-8"?> ...
- 【Android】关于连续多次点击控件的控制方案(新建监听类)
参考:防止Android过快点击造成多次事件的三种方法_胖胖的博客-CSDN博客 实现逻辑很简单: 设置限定时间 在用户点击时开始计时 若计时未超过限定时间,则不允许触发点击事件 因还未学习过Rxja ...
- Android 另类方法监听软键盘的弹出收起事件
http://www.cnblogs.com/csonezp/p/5065624.html 最近做的项目碰到个问题,a界面是fragment+recyclerview,b界面带个edittext,并且 ...
- Qt实现小功能之列表无限加载(创意很不错:监听滚动条事件,到底部的时候再new QListWidgetItem)
概念介绍 无限加载与瀑布流的结合在Web前端开发中的效果非常新颖,对于网页内容具备较好的表现形式.无限加载并没有一次性将内容全部加载进来,而是通过监听滚动条事件来刷新内容的.当用户往下拖动滚动条或使用 ...
- Android ScrollView监听滑动到顶部和底部的两种方式(你可能不知道的细节)
Android ScrollView监听滑动到顶部和底部,虽然网上很多资料都有说,但是不全,而且有些细节没说清楚 使用场景: 1. 做一些复杂动画的时候,需要动态判断当前的ScrollView是否滚动 ...
- Android下用程序的方法为ListView设置分割线Divider样式
使用XML的时候可以使用android:divider属性为ListView设置分割线的样式(颜色或者资源文件),而在Java代码中默认提供的方法 listView.setDivider() 却只支持 ...
- android中ProgressBar和ListView
ProgressBar进度条的使用情况: 进度条的.xml声明:如果不声明格式,则默认格式为转圆圈的形式,声明进度条的visibility为不可见. <ProgressBar android:i ...
随机推荐
- 新手学python-Day3-模块
模块就是引入别人写的,官方写的工具库,就像扳手,钳子,电锯
- 2019-03-15 Python time datetime 获取当下时间 和 格式化时间
import datetime start_date='2018-01-10' end_date='2019-01-10'# 转换为2018-01-10 00:00:00start_date=date ...
- 报错:SyntaxError: Non-ASCII character '\xe4' in file
SyntaxError: Non-ASCII character '\xe1' in file recommendation.py on line 1, but no encoding declare ...
- vim 跳转指定行
在编辑模式下输入 ngg 或者 nG n为指定的行数(如25) 25gg或者25G 跳转到第25行. 在命令模式下输入行号n : n 如果想打开文件即跳转 vim +n FileName 查看当然光标 ...
- jquery-layer.closeAll不执行的错觉
在使用ajax.form提交的时候,弹出了layer插件的页面,于是我想使用layer插件提供的layer.closeAll()方法讲这个弹出的页面关闭,但是尝试了很久不行,到底是为什么呢? 过了一段 ...
- angular-模块Module
模块定义了一个应用程序. 模块是应用程序中不同部分的容器. 模块是应用控制器的容器. 控制器通常属于一个模块. <div ng-app="myApp" runoob-dire ...
- mysql字符集修改(ubuntu)
1.关闭mysql服务 /etc/init.d/mysql start|stop 2.在/etc/mysql/my.cnf,添加下列信息 [client] default-character-set= ...
- 小贝_mysql三种子查询
mysql三种子查询 简要: 一.三种子查询 二.三种子查询理解模型 一.mysql 三种子查询 where子查询.from子查询.exists子查询 二.理解模型: 2.1.一个好的模型,便于我们去 ...
- MongoDB增加数据
MongoDB中出了增加之外,其他的操作都很麻烦. 例子: 1.简单的 db.infos.insert({"url":"www.baidu.com"}); 2. ...
- tensorflow入门教程和底层机制简单解说——本质就是图计算,自动寻找依赖,想想spark机制就明白了
简介 本章的目的是让你了解和运行 TensorFlow! 在开始之前, 让我们先看一段使用 Python API 撰写的 TensorFlow 示例代码, 让你对将要学习的内容有初步的印象. 这段很短 ...