扣扣技术交流群:460189483

对于ListView数据的刷新大家都知道,改变Adapter的数据源,然后调用Adapter的notifyDateSetChanged()方法即可。

  但是我在做公司项目的时候,我的listview有几个item,只有一个item数据需要实时更新,其它都是图片跟文字,不需要更新。因为要实时更新,所以要不停的调用notifyDateSetChanged刷新数据。这样会不停的重新绘制整个listview的界面,性能开销非常大。而且item有图片的话,每个item的图片都需要重新加载,就算图片做了内存缓存,刷新一下图片也会闪一下,不停的刷新就会导致各个item的图片不停的闪,体验一点都不好。

  那么对于上面问题,有没有解决办法呢?当然是有的。我们可以针对某一个item进行局部更新,而不影响其它没有修改的item。那么具体如何实现的呢?有两种实现方式,一种是使用ListView适配器中的ViewHolder找到TextView,另一种是通过API找到,代码见如下

private void updateItem(int itemIndex){if(listView == null){return;}//获取第一个可以看到的item位置int firstVisiblePosition=listView.getFirstVisiblePostion();//获取最后一个可以看到的item位置int lastVisiblePosition=listView.getLastVisiblePostion();//判断是否在范围内if ((itemIndex >= firstVisiblePosition && itemIndex<=lastVisiblePosition) {//得到要更新的item的viewView view = listView.getChildAt(itemIndex - firstVisiblePosition);//方法一:获取ViewHolder,间接获取TextViewViewHolder viewHolder = (ViewHolder)view.getTag();//获取TextViewTextView tv_item = viewHolder.tv_item;//更改数据,其实两步可以合并一步viewHolder.tv_item.setText("hello")tv_item.setText("hello");//方法二,直接获取TextViewTextView tv_item = view.findViewById(R.id.tv_item);tv_item.setText("hello");}
}

2种方法哪种更高效留给自己考虑,亲测都没有问题

我个人比较倾向于使用第一种,可扩展性比较强!

如果要把ListView中所有需要实时显示的item都更改怎么弄呢?其实只需要稍微修改就可以了,见如下代码:

private void updateItem(){if(listView == null){return;}//获取第一个可以看到的item位置int firstVisiblePosition=listView.getFirstVisiblePostion();//获取最后一个可以看到的item位置int lastVisiblePosition=listView.getLastVisiblePostion();//判断是否在范围内for (int i = firstVisiblePosition; i <= lastVisiblePosition; i++) {//得到要更新的item的viewView view = listView.getChildAt(i);//方法一:获取ViewHolder,间接获取TextViewViewHolder viewHolder = (ViewHolder)view.getTag();//获取TextViewTextView tv_item = viewHolder.tv_item;//更改数据,其实两步可以合并一步viewHolder.tv_item.setText("hello")tv_item.setText("hello");//方法二,直接获取TextViewTextView tv_item = view.findViewById(R.id.tv_item);tv_item.setText("hello");}
}

ListView如何单独刷新一个item相关推荐

  1. listview当选中某一个item时设置背景色其他的不变

    2019独角兽企业重金招聘Python工程师标准>>> listview当选中某一个item时设置背景色其他的不变: 可以使用listview.setOnFoucsChangeLis ...

  2. ScrollView 内嵌 ListView 只能看到第一个Item

    解决方案: 给ScrollView 设置 fillViewport 为 true,ListView 就不会只显示第一个了. <ScrollView xmlns:android="htt ...

  3. 怎样获得listview的第一个item?

    ============问题描述============ 想对一个listview的第一行高亮显示. 用listview.getchildat(0)是可以,但是当数据较多时,下一页的第一行也被高亮了, ...

  4. android listview中item倒计时,GitHub - TangAnna/ListViewTimer: 列表中每一个item都有计时器 (可实现倒计时或者计时器的功能)...

    ListViewTimer 列表中每一个item都有计时器 (可实现倒计时或者计时器的功能) 项目中有时会遇到列表中含有倒计时或者是计时器的需求,实现的方式有很多种,此Demo中是使用Thread + ...

  5. Flutter 21: 图解 ListView 下拉刷新与上拉加载 (三)【RefreshIndicator】

    小菜前段时间整理了两种 ListView 的异步加载数据时,下拉刷新与上滑加载更多的方式,每种方式都有自己的优势,网上也有很多大神讲解过 ListView 数据流的种种处理方式,小菜根据实际遇到的情况 ...

  6. android listview设置选中时的item的背景色

    今天实在不知道写些什么内容,所以自己在网上找了些资料,觉得还可以,所以还是写一下,觉得每天写些东西的习惯不能荒废. 默认情况下使用ListView背景色是黑色,选中item的高亮颜色是菊黄色,很多时候 ...

  7. ListView下拉刷新、上拉载入更多之封装改进

    在Android中ListView下拉刷新.上拉载入更多示例一文中,Maxwin兄给出的控件比较强大,前面有详细介绍,但是有个不足就是,里面使用了一些资源文件,包括图片,String,layout,这 ...

  8. Android学习之——ListView下拉刷新

    背景知识 ListView使用非常广泛,对于使用ListView的应用来说,下拉刷新是必不可少要实现的功能. 我们常用的微博.网易新闻,搜狐新闻都使用了这一功能,如下图所示.     微博 搜狐新闻 ...

  9. Android ListView下拉刷新时卡的问题解决小技巧

    问题:ListView下拉刷新时看上去非常的卡 解决方案: 在BaseAdapter的getView方法中,有三个参数 public View getView(int position, View c ...

最新文章

  1. 1132 Cut Integer
  2. 重建包含快照的vmdk描述文件。
  3. 吴晓波上市梦碎,罗永浩:梦太大又入错行
  4. java dom4j读写xml_Java:简单的读写XML文件之使用DOM4J读写
  5. html5学习笔记——html保留标签(一)
  6. 蓝桥杯官网练习系统基础练习(十一)
  7. 微信小程序常用样式汇总
  8. 红帽子linux5.5安装,红帽子企业Linux 5安装  硬盘安装
  9. mysql菜鸟教程 文档_mysql菜鸟教程
  10. H106OJ | 第二次练习(查找)
  11. 相亲聊什么?想要避免尬聊,就从这6个话题入手
  12. jxl 单元格画斜线
  13. markdown 目录一键生成和转为 word 格式
  14. 什么是 ARIMA模型
  15. 人民币升值与升值预期收益股票
  16. python的mag模块_Python Decimal max_mag()用法及代码示例
  17. 《数学之美》读书记录【思维导图记录】:第五章,隐含马尔可夫模型
  18. Linux查看pcie槽位
  19. RTP有效负载(载荷)类型 (RTP Payload Type)
  20. Salesforce上的Saas生态大玩家 Veeva是如何炼成的?

热门文章

  1. Handler内存溢出解决方案
  2. springboot整合支付宝微信支付案例+代码
  3. 计算机图形学(一):初识图形学(定义一个、发展历程、相关科学与技术)
  4. 【笨嘴拙舌WINDOWS】实践检验之剪切板查看器【Delphi】
  5. 实习 week(三)
  6. 本科生学深度学习,搭建环境,再不入坑就晚了
  7. CT图片分类神经网络
  8. screen 乱码问题
  9. 2017c语言 形成性考核,(2017年电大)c语言程序设计课程形成性考核任务样例.doc...
  10. 手机PDF如何转PPT