转 android Listview,gridview局部刷新,部分刷新 (仿QQ动态评论局部刷新)

转自:http://blog.csdn.net/jdsjlzx/article/details/45582719

众所周知Listview和Gridview的刷新界面的方式是调用adapter.notifyDataSetChanged()进行界面刷新。

但是此方法有其弊端,他是将界面中的数据全部刷新一遍,不论数据有没有变化。如果listview加载了很多的数据(如:100条)

在进行刷新时就会造成很大的系统开销如何像qq空间个人动态那样点赞只刷新一条呢:

主要原理:

对listview的某一个item进行刷新

1.要获取要刷新的item当前索引position和数据

2.对获取的数据进行重置

3.将重置的数据放到adapter中的数据集的原来的位置(根据position刷新原数据集的某一条数据)

4.在listview中获取需要刷新的子item的view

5.从更新过的数据集中获取新数据,更新viwe中的数据(handler中操作,实现界面的刷新)

功能如下,代码中有详细注释:

 

[java] view plaincopy
 
  1. publicclassextends privatenull private private   
  2. protectedvoid super new new   
  3. publicvoidintlong   
  4. , item.getData() +    
  5.   
  6.      * 初始化数据 
  7.      */ privatevoid new forint; i < ; i++)  
  8. new      * 自定义item数据类型 
  9.      */ class          * 数据id 
  10.          */ privateint          * 数据 
  11.          */ private publicint return publicvoidint this public return publicvoid this }  

activity进行调用,功能操作主要封装在adapter中如下:

 

 

[java] view plaincopy
 
  1. publicclassextends      * listview中的数据集 
  2.      */ private private private public this this      * 设置listview对象 
  3.      *  
  4.      * @param lisv 
  5.      */ publicvoid this      * update listview 单条数据 
  6.      *  
  7.      * @param item 新数据对象 
  8.      */ publicvoid int;  
  9.   
  10. forint; i < mDataList.size(); i++)  
  11. if   
  12.   
  13. ()  
  14. privatenew publicvoid      * 刷新指定item 
  15.      *  
  16.      * @param index item在listview中的位置 
  17.      */ privatevoidint ifnull return   
  18. int   
  19.   
  20.   
  21.   
  22.   
  23.   
  24.   
  25. publicint   
  26. return   
  27. publicint   
  28. return   
  29. publiclongint   
  30. return   
  31. publicint   
  32. ifnull null return }  
原文地址:https://www.cnblogs.com/1995hxt/p/4831002.html