ListView刷新原理及实现
ListView刷新原理及实现
ListView优化方式
- 界面缓存:ViewHolder+convertView
- 分页加载:上拉刷新
- 图片缓存
- 快速滑动ListView禁止刷新
效果
上拉加载更多原理及实现
当我们手指滑动到listview最后位置的时候,我们触发加载数据的方法。这触发之前我们需要做一些工作,包括:如何判断滑动到最后?如何避免重复加载数据?加载之后如何刷新界面?
- 界面实现AbsListView.OnScrollListener接口,当
firstVisibleItem + visibleItemCount >= totalItemCount
即可判断滑动到了最下面; - 为了不重复加载数据,例如当我手指滑动到最下面,手指立马离开,然后再马上滑动,就会导致数据拉取两次,我们利用
mHandler.hasMessages(LOAD)
判断消息队列中是否已经存在这个消息; 我们在handler中加载新数据,并且利用
mStringArrayAdapter.notifyDataSetChanged();
通知界面刷新。int result1;int result2;//监听状态改变@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {switch (scrollState) {case SCROLL_STATE_IDLE://滑动结束if (result1 >= result2) {//只发送一次,防止多次加载数据if (!mHandler.hasMessages(LOAD))mHandler.sendEmptyMessageDelayed(LOAD, 5000);}break;case SCROLL_STATE_FLING://手指离开屏幕break;case SCROLL_STATE_TOUCH_SCROLL://滑动中break;}}//滑动结束之后执行@Overridepublic void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {// Log.e(TAG, "firstVisibleItem:" + firstVisibleItem + "---visibleItemCount:" + visibleItemCount + "--totalItemCount:" + totalItemCount);//加载到最后if (firstVisibleItem + visibleItemCount >= totalItemCount) {//这里不处理,在上面状态改变结束之后再处理}result1=firstVisibleItem + visibleItemCount;result2=totalItemCount;}
下拉加刷新原理及实现
下拉刷新核心原理和上拉加载核心原理一致,只是有细节不同。我们需要处理以下问题:如何判断用户当前位置在数据第一条?如何判断用户在第一条的同时下拉一定距离?如何刷新更新界面(上面已经解决)?
注意事项:
初始化应该设置默认上面的刷新图标隐藏,在ProgressBar中设置
android:visibility="gone";
这样设置还不行,还需要设置mListView.setSelection(1);
让当前第一列是第一条数据。同样的,在加载完成之后也要设置mListView.setSelection(1);
,显示第一行。
实现
- 判断第一条的方式
mListView.getFirstVisiblePosition()==0
- mListView实现
mListView.setOnTouchListener
方法,来根据用户手指按下的位置以及抬起的位置,计算这两者的距离与我们规定的距离(如100)的大小,如大于就进行刷新操作。 刷新之后通知界面
mStringArrayAdapter.notifyDataSetChanged();
mListView.setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:startY=event.getY();break;case MotionEvent.ACTION_MOVE:break;case MotionEvent.ACTION_UP:endY=event.getY();if(endY-startY> DISTANT&&(mListView.getFirstVisiblePosition()==1||mListView.getFirstVisiblePosition()==0)){if(!mHandler.hasMessages(FRESH)){mProgressBar_top.setVisibility(View.VISIBLE);//notifmHandler.sendEmptyMessageDelayed(FRESH,5000);}}break;}//不能返回true,不然直接消费掉了return false;}});
操作代码
http://download.csdn.net/detail/wgyscsf/9523120
ListView刷新原理及实现相关推荐
- android ListView 刷新卡顿问题
本人刚接触android开发,最近遇到一个关于ListView 刷新item一直卡顿的现象,进度条一直只刷新两次就结束了,灰常不明白,各种百度,各种找资料,什么线程什么的都试了遍,然并卵.一直到看到了 ...
- listview刷新与内部控件的监听
困扰我多日的关于Android中的listview问题,今天终于完全解决了,首先讲一下到底遇到的是什么问题:(1)点击listview的item布局中的ImageButton按钮来获取相应的Textv ...
- 移动端下拉刷新原理和实例
移动端的下拉刷新是一个很常见的功能,也有许多开源库实现了这个功能,不过为了学习,还是先自己写一个例子学习一下.其中用到了一些touch事件和一些DOM属性CSS3属性.直接上代码,代码里面有注释. & ...
- listview刷新_Flutter NestedScrollView 滑动折叠头部下拉刷新效果
题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精. Flutter是谷歌推出的最新的移动开发框架. 本实例运行效果如下 : //启动函数void main() { runApp(Root ...
- listview 刷新结束 监听_Flutter 开发从 0 到 1(四)ListView 下拉加载和加载更多
在<APP 开发从 0 到 1(三)布局与 ListView>我们完成了 ListView,这篇文章将做 ListView 下拉加载和加载更多. ListView 下拉加载 Flutter ...
- android listview 刷新不正确,Android中设置ListView内容刷新问题
最近在学习Android的listView控件时遇到了一个问题,如何添加一个Item到ListView中并及时的刷新出来.在网上查了很多帖子,很多人在问,也很多人在解答,但是总的来说都没找到详细的解决 ...
- html下拉刷新原理,科技常识:移动端下拉刷新头实现原理及代码实现
科技常识:移动端下拉刷新头实现原理及代码实现 2021-05-24 21:23:20 • 互联网 今天小编跟大家讲解下有关移动端下拉刷新头实现原理及代码实现 ,相信小伙伴们对这个话题应该有所关注吧,小 ...
- Android ListView工作原理完全解析,带你从源码的角度彻底理解
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/44996879 在Android所有常用的原生控件当中,用法最复杂的应该就是List ...
- listview刷新(litepal)
问题 如何单独刷新listview,并且不影响布局上的数据 litepal-到–>list数据表-到---->Adapter----到->显示在listview上. 要刷新listv ...
- SpringCloud Zuul(九)之路由自动刷新原理
一.现象 发布新服务,然后在数据库配置了路由,使用服务路径访问404.然后重新发布新的服务,就可以继续访问得到 (1)配置了路由第一次访问 (2)重新发布后访问 二.分析 (1)查找Refreshab ...
最新文章
- OpenCV 腐蚀和膨胀
- java变量只声明未初始化是否可以直接使用?
- Bugku-CTF之前女友(SKCTF)
- .NET和Docker ,比翼双飞
- [Java基础]哈希值
- Springboot实现文件上传,并防止同文件重复上传
- linux_ELF静态注入
- Seesaw Loss:一种面向长尾目标检测的平衡损失函数
- Spring学习笔记:第一个Spring Boot程序HelloWorld
- 【安全】通过LAM(ldap-account-manager)来管理OpenLDAP
- haproxy keepalived_企业实战KeepAlived+Redis+Haproxy实现主从热备、负载均衡、秒级切换...
- java接收json字符串_JAVA后台接收前台传过来的json字符串并解析获得key 和value
- SQL关键字筛选数据
- 关于DIPS的DLL注入(第22章)
- window包管理器
- 什么是servlet ,servlet的作用
- python正则取反,一文搞定Python正则表达式
- python编程之TypeError: list expected at most 1 arguments, got 7
- 软件测试的工资高还是开发者工资高?
- 玩烂vue之vue练手项目
热门文章
- MATLAB 2018a Mac版安装激活教程
- matlab设计光栅,光栅原理及MATLAB仿真.doc
- JSP页面乱码的几种解决方案
- 发那科机器人示教器键盘_不限 发那科机器人示教器触摸屏急停按键失效维修...
- 周鸿祎——互联网业界的“搅局者”
- SVN 中文工具(Tools)
- mqtt测试工具(持续更新...)
- python开发简单计算器下载_如何运用Python编写简易计算器?
- 某学校买了一批计算机配置为,初中信息技术考试选择题
- cmd运行tomcat出现乱码