android ListView 局部刷新
今天,简单讲讲android如何对ListView 进行局部刷新。
之前,自己做的ListView 发现刷新频率太高了,而且很多界面上看不到的数据改变时调用Adapter.notifyDataSetChanged()也会导致整个ListView 进行刷新。其实我们只需在界面元素改变时刷新界面那个改变的item就可以。如果不停刷新这个界面,会导致效率减低。所以在网上搜索了资料,最终解决了问题。
平时在写ListView的时候需要更改某些数据,这种情况我们一般会调用
notifyDataSetChanged()方法进行刷新,调用notifydatasetchange其实会导致adpter的getView方法被多次调用(画面上能显示多少就会被调用多少次),并且在有获取网络图片的情况下会可能造成大量闪动或卡顿,极大的影响用户体验(图片重新加载并闪动在ImageLoader框架中会出现,在glide框架中没有出现)。
所以我们需要做单行刷新来进行优化
这个是Google官方给出的解决方案:
private void updateSingleRow(ListView listView, long id) { if (listView != null) { int start = listView.getFirstVisiblePosition(); for (int i = start, j = listView.getLastVisiblePosition(); i <= j; i++) if (id == ((Messages) listView.getItemAtPosition(i)).getId()) { View view = listView.getChildAt(i - start); getView(i, view, listView); break; } } }
简单讲讲,其实就是通过改变数据的位置找到对应的ListView 界面元素的位置,直接调用adpter.getView(i, view, listView); 进行局部刷新。上面的代码也可以简写为:
/*** 局部更新数据,调用一次getView()方法;Google推荐的做法** @param listView 要更新的listview* @param position 要更新的位置*/public void notifyDataSetChanged(ListView listView, int position) {/**第一个可见的位置**/int firstVisiblePosition = listView.getFirstVisiblePosition();/**最后一个可见的位置**/int lastVisiblePosition = listView.getLastVisiblePosition();/**在看见范围内才更新,不可见的滑动后自动会调用getView方法更新**/if (position >= firstVisiblePosition && position <= lastVisiblePosition) {/**获取指定位置view对象**/View view = listView.getChildAt(position - firstVisiblePosition);adpter.getView(position, view, listView);}}
这个也是一样,先判断刷新元素是否在ListView 的可见位置,如果在就直接调用adpter.getView(position, view, listView);进行刷新。
android ListView 局部刷新就讲完了。
就这么简单。
android ListView 局部刷新相关推荐
- Android ListView局部刷新item
当前ListView页面跳转到其他页面返回后,重新获取数据后刷新局部item 1.首先需要获取到跳转之前item的位置,给ListView设置setOnScrollViewListener()接口,在 ...
- ListView 局部刷新
概述 在使用ListView的时候,我们都会对列表数据进行更新,当数据变化时,我们会调用adapter的notifyDataSetChange方法去刷新列表.但是,该刷新方法是使整个列表都更新一遍(调 ...
- android局部布局刷新,Android RecyclerView 局部刷新分析
前情回顾 之前写的 PowerAdapter 和 SelectPowerAdapter 从创建到现在,已经两年多,期间发生了翻天覆地的变化.一开始,我把 SwipeRefreshLayout 和 Re ...
- Flutter ListView 局部刷新数据、ListView点赞收藏
题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精. Flutter是谷歌推出的最新的移动开发框架. [x1]微信公众号的每日提醒 随时随记 每日积累 随心而过 [x2]各种系列的视频教程 ...
- android 点赞局部刷新,局部刷新ListView,实现点赞功能
今天看到一个需要实现一个点赞的功能.自己想没想明白,后来看了http://blog.csdn.net/nupt123456789/article/details/39432781 这篇博客,才有了思路 ...
- Android ListView列表 刷新和加载更多
上下拉实现刷新和加载更多的ListView,如下: package com.sin.android.ui;import android.content.Context; import android. ...
- Android listview图片刷新闪烁
很多时候listview里面有图片的时候 我们下拉加载更多或者刷新的时候 列表里面的图片会闪烁 这不是我们想要的效果,所以需要在adapter里面做一定的处理. 在adapter里面加载图片后 把这个 ...
- android listview多线程刷新各自的进度,从另一个线程更新主线程中的ListView
Yar.. 12 我个人使用自定义线程(扩展线程的类),但通过Message发送响应给UI线程.所以在线程的run()函数中有: Message msg; msg = Message.obtain() ...
- android:ListView的局部刷新
1.简介 对于android中的ListView刷新机制,大多数的程序员都是很熟悉的,修改或者添加adapter中的数据源之后,然后调用notifyDataSetChanged()刷新ListView ...
最新文章
- Smart Card知识
- 【Linux】一步一步学Linux——dirs命令(了解)(24)
- 今后最有前途的媒体格式 MXF
- 76Byte让你的JQuery更快
- java订单超时取消设计_PHP如何实现处理过期或者超时订单的,并还原库存
- mysql b树深度_为什么Mysql用B+树做索引而不用B树
- Android设计模式--观察者模式
- idea svn 的使用----转载,挺好的
- 清除网页缓存的快捷键
- pymysql的使用
- 处理团队人际关系的九大原则
- 华为手机图标怎么变小_华为手机字太小看不清?那是你不会设置!四种方法让手机显示变大...
- 曹鹏 其言其人 2009-06-15 17:44
- 2022-2028全球与中国语音疏散系统市场现状及未来发展趋势
- 搭建视频会议系统OpenMeetings
- 零基础学C语言之初识C语言(上)
- 基于2022高考数学全国卷I概率题解题思路初步分析新冠病毒疫苗
- 1307:【例1.3】高精度乘法
- 考研:从了解初试开始!
- 「LSTM 之父」亲笔万字长文,只为向世人证明:深度学习不是在母语为英语的地方被发明的