0. 前言  

局部刷新,即只需要在数据发生变化时才去刷新ListView中对应的Item,数据未发生变化时不会去刷新ListView中对应的Item。对于getView()非常耗时的情况下将体现出极大的性能优化。局部刷新的功能早已经被集成在了RecycleView中,而且RecycleView还引入了增加和删除的动态效果等等,在性能上和定制上都有很大的改善。本篇着重介绍ListView中局部刷新的实现。

1.  结合Adapter的hasStableIds()以及getItemId()

局部刷新的实质是找到那些数据发生改变Item,并且重新调用它的一次getView()方法。

那么如何才能让Adapter知道哪些Item的数据发生了变化呢?Stack OverFlow上有人提出了以下方案:

//If hasStableIds() returns false then each time you call notifyDataSetChanged() your Adapter will look at the returned
//value of getItemId and will eventually call getView(int position, View convertView, ViewGroup parent) only for those
//items which id has changed.Using this technique you can update only one Item in the ListView.

设置Adapter的hasStableIds()返回false,代表子元素持有不稳定的ID。如果hasStableIds()返回了false,每次调用notifyDataSetChanged()方法adapter就会判断getItemId()方法的返回值,如果该返回值发生了变化,即某个Item发生了变化,那么就只调用发生变化的那些Item的getView()方法,从而达到局部刷新的效果。

举例如下:如果你有一个List的元素,Bean文件如下:

class Data{String myUrl;String myContent;
}

你需要在getItemId()方法中这样写:

@Override
public long getItemId(int position){Data data = mList.get(position);return (data. myUrl + data. myContent).hashcode();
}

因为我们平时在写getItemId()方法的时候直接返回了position,这里我们让getItemId()的返回值不依赖于位置,而是依赖于这个位置上数据的实时信息,如果这个位置上的数据发生了变化(即List.get(position)处的数据发生了改变),再调用notifyDataSetChanged()时,Adapter会检测到该位置的ID发生了变化,就会重新调用该位置Item的getView()方法,从而达到局部刷新的效果。

2.  直接找到指定位置的holder

private void updateItem(int position) {View view = mListview.getChildAt(position);MyAdapter.ViewHolder holder = (MyAdapter.ViewHolder)view.getTag();holder.textView.setText("This is new");//记得更新list数据源中position位置的数据,避免滑动后局部刷新失效
}

以上方式是比较常规的,即根据position位置找到对应子View的holder,直接根据业务需求修改holder中的数据即可。当然,记得更新list数据源中position位置的数据,否则来回滑动后局部刷新会失效。

Android开发——ListView局部刷新的实现相关推荐

  1. android ListView 局部刷新

    今天,简单讲讲android如何对ListView 进行局部刷新. 之前,自己做的ListView 发现刷新频率太高了,而且很多界面上看不到的数据改变时调用Adapter.notifyDataSetC ...

  2. android 解决listview.notifyDataSetChanged刷新时Imageloader加载图片闪烁问题

    今天,简单讲讲android里再listview调用notifyDataSetChanged刷新界面时,Imageloader加载图片会闪烁的问题. 最近,发现app里的listview图片会出现闪烁 ...

  3. ListView 局部刷新

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

  4. android listview 数据同步,android中ListView数据刷新时的同步方法

    本文实例讲述了android中ListView数据刷新时的同步方法.分享给大家供大家参考.具体实现方法如下: public class Main extends BaseActivity { priv ...

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

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

  6. android开发 listview 头部 轮播,listview添加的头部布局超过一屏头部内容显示不全...

    headView的实际高度超过一个屏幕,但是显示的结果只有一个屏幕,超过一个屏幕高度意外的部分显示不全. 只使用了listView.getRefreshable().addHeadView(headV ...

  7. android 自定义view局部刷新,Android 优化之局部刷新

    RecyclerView 局部刷新 相信现在已经很少人不用 RecyclerView 了,如果只有一个 item 的数据源改变的时候,大家都会用 notifyItemChanged(int posit ...

  8. FineReport——JS二次开发(局部刷新)

    在FR中,可以通过在form表单设置多个报表模板,然后通过对某一模板刷新实现局部刷新的功能,在cpt模板中,由于只存在一个模板,所以无法实现局部刷新. 其实,最好的局部刷新办法是自定义一个页面,然后添 ...

  9. Android ListView局部刷新item

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

  10. android开发--ListView中的getView原理

    其实这里的复用技术在列表中是十分常见的,iphone中的tableView也有相关的技术,cell的复用 工作原理: ListView 针对List中每个item,要求 adapter "给 ...

最新文章

  1. vivado----fpga硬件调试 (二)----mark_debug
  2. socket编程之addrinfo结构体与getaddrinfo函数
  3. 最新阿里内推Java后端面试题
  4. stm32f103c8t6掉坑记
  5. 力扣【每日温度】leetcode-739.每日温度:单调栈解法
  6. 网络爬虫:使用多线程爬取网页链接
  7. gc日志一般关注什么_GC日志说明
  8. 【Python基础】pandas的骚操作:一行 pandas 代码搞定 Excel “条件格式”!
  9. src-d/gogit 使用
  10. 《从零开始学习ASP.NET MVC 1.0》-开天辟地入门篇
  11. webpack --- 发布环境的配置 代码压缩 代码分类
  12. asp.net core监控—引入Prometheus(五)
  13. SPOJ104 Highways,跨越数
  14. ListView 复用学习
  15. Office默认打开方式的改变方法以及安装程序莫名启动问题的权威汇总
  16. R语言实现故障树定量与定性分析——以GJB-Z 768A-1998 故障树分析指南图5.37为例
  17. Redis安装(Windows环境下Redis安装)
  18. 图解3GPP规范文档组织结构与编号规则
  19. 孙悟空在大闹蟠桃园的时候,第一天吃掉了所有桃子总数一半多一个,第二天又将剩下的桃子吃掉一半多一个,以后每天吃掉前一天剩下的一半多一个,到第n天准备吃的时候只剩下一个桃子。第一天开始吃的时候一共有多少个
  20. Linux如何让lst自动对齐,linux自動增加表空間

热门文章

  1. 电脑拖机,win10一台电脑两人用
  2. 语音识别之——mfcc什么是汉明窗,为什么加汉明窗
  3. Linux 环境下思源黑体字体与 Java 之间的兼容性问题的解决
  4. FANUC数控系统应用中心
  5. 1501_FTA失效树分析简介
  6. SQLServer 2012下载及安装教程
  7. 统计学常用知识-Pearson相关系数-显著检验-置信区间
  8. 图中提取数据再作图---GetData Graph Digitizer
  9. vscode 格式化某一段代码_vscode代码格式化
  10. R语言数据分析笔记——方差分析(单因素方差分析、双因素方差分析、多因素方差分析)在Excel、SPSS、R语言中的操作)