今天,简单讲讲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 局部刷新相关推荐

  1. Android ListView局部刷新item

    当前ListView页面跳转到其他页面返回后,重新获取数据后刷新局部item 1.首先需要获取到跳转之前item的位置,给ListView设置setOnScrollViewListener()接口,在 ...

  2. ListView 局部刷新

    概述 在使用ListView的时候,我们都会对列表数据进行更新,当数据变化时,我们会调用adapter的notifyDataSetChange方法去刷新列表.但是,该刷新方法是使整个列表都更新一遍(调 ...

  3. android局部布局刷新,Android RecyclerView 局部刷新分析

    前情回顾 之前写的 PowerAdapter 和 SelectPowerAdapter 从创建到现在,已经两年多,期间发生了翻天覆地的变化.一开始,我把 SwipeRefreshLayout 和 Re ...

  4. Flutter ListView 局部刷新数据、ListView点赞收藏

    题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精. Flutter是谷歌推出的最新的移动开发框架. [x1]微信公众号的每日提醒 随时随记 每日积累 随心而过 [x2]各种系列的视频教程 ...

  5. android 点赞局部刷新,局部刷新ListView,实现点赞功能

    今天看到一个需要实现一个点赞的功能.自己想没想明白,后来看了http://blog.csdn.net/nupt123456789/article/details/39432781 这篇博客,才有了思路 ...

  6. Android ListView列表 刷新和加载更多

    上下拉实现刷新和加载更多的ListView,如下: package com.sin.android.ui;import android.content.Context; import android. ...

  7. Android listview图片刷新闪烁

    很多时候listview里面有图片的时候 我们下拉加载更多或者刷新的时候 列表里面的图片会闪烁 这不是我们想要的效果,所以需要在adapter里面做一定的处理. 在adapter里面加载图片后 把这个 ...

  8. android listview多线程刷新各自的进度,从另一个线程更新主线程中的ListView

    Yar.. 12 我个人使用自定义线程(扩展线程的类),但通过Message发送响应给UI线程.所以在线程的run()函数中有: Message msg; msg = Message.obtain() ...

  9. android:ListView的局部刷新

    1.简介 对于android中的ListView刷新机制,大多数的程序员都是很熟悉的,修改或者添加adapter中的数据源之后,然后调用notifyDataSetChanged()刷新ListView ...

最新文章

  1. Smart Card知识
  2. 【Linux】一步一步学Linux——dirs命令(了解)(24)
  3. 今后最有前途的媒体格式 MXF
  4. 76Byte让你的JQuery更快
  5. java订单超时取消设计_PHP如何实现处理过期或者超时订单的,并还原库存
  6. mysql b树深度_为什么Mysql用B+树做索引而不用B树
  7. Android设计模式--观察者模式
  8. idea svn 的使用----转载,挺好的
  9. 清除网页缓存的快捷键
  10. pymysql的使用
  11. 处理团队人际关系的九大原则
  12. 华为手机图标怎么变小_华为手机字太小看不清?那是你不会设置!四种方法让手机显示变大...
  13. 曹鹏 其言其人 2009-06-15 17:44
  14. 2022-2028全球与中国语音疏散系统市场现状及未来发展趋势
  15. 搭建视频会议系统OpenMeetings
  16. 零基础学C语言之初识C语言(上)
  17. 基于2022高考数学全国卷I概率题解题思路初步分析新冠病毒疫苗
  18. 1307:【例1.3】高精度乘法
  19. 考研:从了解初试开始!
  20. 「LSTM 之父」亲笔万字长文,只为向世人证明:深度学习不是在母语为英语的地方被发明的

热门文章

  1. 10树莓派Samba的安装与配置
  2. 2016级算法第六次上机-A.Bamboo之寻找小金刚
  3. Vagrant使用简介
  4. 【海洋女神原创】谈谈静默安装
  5. 设计模式(三):观察者模式与发布/订阅模式区别
  6. 超全!整理常用的iOS第三方资源
  7. 《实战突击.php项目开发案例整合》.(明日科技).[PDF]ckook
  8. sql 中删除重复数据的方法
  9. Remove Nth Node From End of List
  10. 营销 | 10个助燃商业增长的市场营销战略!